2

Mit out-Parameter für Anzeigemethode wird in Browser arbeiten heißt http://localhost:2617/UserService.svc/testWCF-Client: Führen von XML-String in der WCF REST-Dienst WebInvoke

Wenn ich einen Parameter hinzufügen i nicht in der Lage bin es auch zu sehen.

Ich habe den folgenden Vertrag.

[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; 
} 

Ich versuche

  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()); 

nicht in der Lage Ich bin mit dem folgenden Code aufzurufen Ausgabe erhalten für auf diesem that.please mir helfen.

+1

Ihre Methode auf dem Client-Ende ist "POST", aber am Serverende haben Sie Methode = "PUT" - ich hätte gedacht, dass sie gleich sein müssten - versuchen Sie vielleicht, Ihren Server auf POST zu ändern? – kmp

+0

ich änderte es POST auch ... ich habe auf verschiedene Arten versucht, aber es funktioniert nicht .. –

+1

Sie haben einen Namespace deklariert, so dass der Namespace wäre http://tempuri.org - anstatt leer. – Chris

Antwort

1

Es gibt ein paar Dinge, die in Ihrem Code nicht richtig sind.

Kunde

Auf dem Client Sie den Namespace angeben müssen tempuri sein, da Sie keine expliziten eine erklärt haben, so dass Ihr Client-Code, dies sein müßte:

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()); 

Dienst

Auf dem Dienst der UriTemplate ist nicht ganz richtig - Sie angeben /tes/{name} so wird, dass expectin werden g eine URL wie http://localhost:2617/UserService.svc/tes/shiva, aber Sie wollen XML-Daten in den Körper zu posten, so dass Sie das zu UriTemplate = "/test" ändern sollten (ich nehme an, Sie meintest Test und nicht tes wie in Ihrer Frage).

Auch sollte die Methode POST sein, wenn Sie Daten an sie senden möchten (der Client muss den Dienst übereinstimmen und ich nehme an, was Sie auf dem Client haben, was Sie wollen).

So, zum Schluss, Ihre IUserService sollte wie folgt aussehen:

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

Sie müssen noch eine Klasse erstellen

public class Test 
{ 

    public string name { get; set; } 

} 

Sie auch Fiedler verwenden können, wenn überprüfen {name: 999} könnte als ein Parameter übergeben werden.