2

Display メソッドのパラメーターがない場合、ブラウザーで動作しています。つまり、http://localhost:2617/UserService.svc/test です。

1 つのパラメーターを追加すると、それも参照できません。

以下の契約をしています。

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

そのための出力を取得できません。これについて助けてください。

4

2 に答える 2

1

コードに正しくないものがいくつかあります。

クライアント

クライアントでは、名前空間を明示的に宣言していないため、名前空間を 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}のような URL を期待していhttp://localhost:2617/UserService.svc/tes/shivaますが、本文に XML データを投稿したいので、それを変更する必要がありますUriTemplate = "/test"(私は、あなたが tes ではなく test を意味していると仮定しています)あなたの質問で)。

また、データを POST したい場合は、メソッドを POST にする必要があります (クライアントはサービスと一致する必要があり、クライアントにあるものが必要なものであると想定しています)。

したがって、結論として、IUserService は次のようになります。

[ServiceContract]
public interface IUserService
{        
    [OperationContract]
    [WebInvoke(Method = "POST",
               UriTemplate = "/test",
               BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string Display(string name);
}
于 2012-04-05T13:07:45.120 に答える
1

まだクラスを作成する必要があります

public class Test
{

    public string name { get; set; }

}

fiddler を使用して、{name:999} をパラメーターとして渡すことができるかどうかを確認することもできます。

于 2012-06-05T12:03:24.637 に答える