クライアントから 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つの投稿を読みましたが、これを挿入する上記のコメントを外したコードでも失敗します。
ご指摘ありがとうございます。
レイ