5

私はWCF、RESTなどの初心者です。サービスとクライアントを作成しようとしています。xmlを文字列としてサービスに渡し、応答を返したいです。

本文のxmlをPOSTメソッドに渡そうとしていますが、クライアントを実行するとハングします。

uriの一部としてパラメーターを受け入れるようにサービスを変更すると、正常に機能します。(UriTemplateを"getString"から"getString / {xmlString}"に変更し、文字列パラメーターを渡す場合)。

以下のコードを貼り付けています。

サービス

[ServiceContract]
public interface IXMLService
{
    [WebInvoke(Method = "POST", UriTemplate = "getString", BodyStyle=WebMessageBodyStyle.WrappedRequest, 
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]

    [OperationContract]
    string GetXml(string xmlstring);
}

//実装コード

public class XMLService : IXMLService
{
    public string GetXml(string xmlstring)
    {
        return "got 1";
    } 
}    

クライアント

string xmlDoc1="<Name>";        
xmlDoc1 = "<FirstName>First</FirstName>";
xmlDoc1 += "<LastName>Last</LastName>";
xmlDoc1 += "</Name>";

HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(@"http://localhost:3518/XMLService/XMLService.svc/getstring");
request1.Method = "POST";
request1.ContentType = "application/xml";
byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1);        
request1.GetRequestStream().Write(bytes, 0, bytes.Length); 

Stream resp = ((HttpWebResponse)request1.GetResponse()).GetResponseStream();
StreamReader rdr = new StreamReader(resp);
string response = rdr.ReadToEnd();

誰かがそれの何が悪いのか指摘してもらえますか?

4

4 に答える 4

8

オペレーション コントラクトを変更して、XElement と Bare の BodyStyle を使用する

[WebInvoke(Method = "POST", 
    UriTemplate = "getString", 
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml, 
    ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
string GetXml(XElement xmlstring);

さらに、クライアント コードに以下を含める必要があると思われます (最初の += に注意してください)。

string xmlDoc1="<Name>";
xmlDoc1 += "<FirstName>First</FirstName>";
xmlDoc1 += "<LastName>Last</LastName>";
xmlDoc1 += "</Name>";
于 2011-06-06T15:25:26.720 に答える
0

問題は、サービス コントラクトが定義されている名前空間の要素に受信 XML をラップする必要がある を設定していることだと思います。BodyStyleを設定して、@Ladislav Mmka がコメントで提案したように XElement を使用する場合あなたは行く準備ができているはずです。WrappedRequest<GetXml>BodyStyleBare

于 2011-06-06T15:15:21.263 に答える
0

<string/>適切な Microsoft XML シリアル化名前空間を使用して、XML 文字列をタグでラップする必要があります。この質問は SO で以前に回答されていますが、現時点では見つかりません。

于 2011-06-06T15:15:59.340 に答える