2

С из параметров для метода отображения она работает в браузере т.е. http://localhost:2617/UserService.svc/testФОС Клиент: Передача строки XML в службе WCF REST с помощью WebInvoke

Когда я добавить один параметр я не могу просмотреть его также.

У меня есть следующий договор.

[ServiceContract] 
public interface IUserService 
{ 
    [OperationContract] 
    [WebInvoke(Method="PUT",UriTemplate = "/tes/{name}", 
    BodyStyle=WebMessageBodyStyle.WrappedRequest)] 
    string Display(string name); 
} 

public string Display(string name) 
{ 
     return "Hello, your test data is ready"+name; 
} 

Я пытаюсь позвонить, используя следующий код

  string url = "http://localhost:2617/UserService.svc/test"; //newuser 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
     string xmlDoc1 = "<Display xmlns=\"\"><name>shiva</name></Display>"; 
     req.Method = "POST"; 
     req.ContentType = "application/xml"; 
     byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1); 
     req.GetRequestStream().Write(bytes, 0, bytes.Length); 

     HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
     Stream responseStream = response.GetResponseStream(); 
     var streamReader = new StreamReader(responseStream); 

     var soapResonseXmlDocument = new XmlDocument(); 
     soapResonseXmlDocument.LoadXml(streamReader.ReadToEnd()); 

Я не могу получить выход для that.please помочь мне в этом.

+1

Ваш метод на стороне клиента - «POST», но на сервере у вас есть Method = «PUT» - я бы подумал, что они должны быть одинаковыми - попробуйте, возможно, изменить свой сервер на POST? – kmp

+0

Я изменил его POST также ... я пробовал по-разному, но он не работает. –

+1

вы havent объявили пространство имен, поэтому пространство имен было бы http://tempuri.org - а не пустым. – Chris

ответ

1

В коде есть несколько вещей, которые не совсем правы.

Client

На клиенте нужно указать пространство имен, чтобы быть tempuri, так как вы не объявили явно один, так что ваш клиентский код должен был бы быть таким:

string url = "http://localhost:2617/UserService.svc/test"; //newuser 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
string xmlDoc1 = "<Display xmlns=\"http://tempuri.org/\"><name>shiva</name></Display>"; 
req.Method = "POST"; 
req.ContentType = "application/xml"; 
byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1); 
req.GetRequestStream().Write(bytes, 0, bytes.Length); 

HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
var streamReader = new StreamReader(responseStream); 

var soapResonseXmlDocument = new XmlDocument(); 
soapResonseXmlDocument.LoadXml(streamReader.ReadToEnd()); 

служба

на службы UriTemplate не совсем правильно - вы указываете /tes/{name} так, что будет expectin g URL-адрес, такой как http://localhost:2617/UserService.svc/tes/shiva, но вы хотите отправить XML-данные ему в теле, чтобы вы его изменили до UriTemplate = "/test" (я предполагаю, что вы имели в виду тест, а не тес, как в вашем вопросе).

Кроме того, метод должен быть POST, если вы хотите получать данные POST (клиент должен соответствовать службе, и я предполагаю, что у вас есть на клиенте то, что вы хотите).

Итак, в заключении, ваш IUserService должен выглядеть следующим образом:

[ServiceContract] 
public interface IUserService 
{   
    [OperationContract] 
    [WebInvoke(Method = "POST", 
       UriTemplate = "/test", 
       BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    string Display(string name); 
} 
1

Вам все еще нужно создать класс

public class Test 
{ 

    public string name { get; set; } 

} 

Вы также можете использовать скрипач, чтобы проверить, если {имени: 999} может быть передан как параметр.

 Смежные вопросы

  • Нет связанных вопросов^_^