1

クライアントから POST される ASPX ページを継承しました。クライアントを変更することはできません。これをWCF Restサービスとしてやり直したい。ASPX ページは、Page_load イベントの要求から XML データを取得します。

かなり読んだ後、同じテストデータで動作する WCF Rest サービスのセットアップがありますが、テストコードが contentType を次のように設定している場合のみです。

  request.ContentType = @"application/x-www-form-urlencode";

私を呼んでいるクライアントは、次のものを使用するだけです:

  request.ContentType = @"text/xml";

これは400 エラーで失敗します。

これが私のインターフェースです:

public interface ISmsReceive {
    [OperationContract]
    [WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Xml,
    RequestFormat = WebMessageFormat.Xml,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "xml")]
    string Receive(Stream ID);
}

これが機能するサンプル呼び出しです。

  string s = "http://localhost:1773/SmsReceive.svc/xml";
  String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
            "<accountrequest>" + // xmlns=\"http://tempuri.org/\">" +
            "<accountprocessinboundmessage>" +
            "<inboundnumber><![CDATA[123]]></inboundnumber>" +
            "<dateinsert><![CDATA[1/1/2003 12:00:00 PM]]></dateinsert>" +
            "<inboundcli><![CDATA[+123]]></inboundcli>" +
            "<message><![CDATA[blah blah]]></message>" +
            "</accountprocessinboundmessage>" +
            "</accountrequest>";

  WebRequest request = WebRequest.Create(s);

  request.Method = "POST";
  // Works with this
  request.ContentType = @"application/x-www-form-urlencode";

  // Fails with this
  //request.ContentType = @"text/xml";

  xmlStream = (request.GetRequestStream());
  StreamWriter writer = new StreamWriter(xmlStream);
  writer.Write(xmlString);
  writer.Flush();
  writer.Close();

  WebResponse response = request.GetResponse();
  StreamReader reader = new StreamReader(response.GetResponseStream());
  String responseString = reader.ReadToEnd();

XMLでxmlnsを定義する必要があるという1つの投稿を読みましたが、これを挿入する上記のコメントを外したコードでも失敗します。

ご指摘ありがとうございます。

レイ

4

0 に答える 0