1

外部 API によって呼び出される REST WCF サービスを作成しました。リクエストは、ISO-8859-1 で XML POST リクエストを送信しています。これにより、サービスから 400 の不正な要求応答が返されます。

これが私のサービスメソッドのスタブです:

 [OperationContract]
 [WebInvoke(Method ="POST", UriTemplate="/", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
 [FaultContract(typeof(String))]
 XmlElement GetInstructions(XmlElement request);

現在、リクエストを傍受して適切なコンテンツ タイプを返そうとしています。

public class XmlContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat GetMessageFormatForContentType(string contentType)
    {
        return WebContentFormat.Xml;
    }
}

これは、ヘッダーから charset=ISO-8859-1 を削除した場合にのみ機能します。

IClientMessageInspector と IDispatchMessageInspector の使用例を見てきましたが、何かが欠けていない限り、それらは SOAP に固有のようです。

これを修正するにはどうすればよいですか? 着信要求を制御することはできません。

洞察をありがとう。

XML 要求の最初の部分は次のとおりです。

POST http://localhost:54814/autocallerid.svc HTTP/1.1
Host: localhost:54814
Content-Type: text/xml, charset=ISO-8859-1
Content-Length: 1734

<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os">
    <Subject SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
 .... 
4

1 に答える 1

1

わかった。問題を解決しました。

入力タイプを XmlElement から Stream に変更し、フォーマットを WebContentFormat.Raw として返す必要がありました。

そのようです:

 [OperationContract]
 [WebInvoke(Method ="POST", UriTemplate = "/info", BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
 [FaultContract(typeof(String))]
 XmlElement GetInstructions(Stream request);

この:

public class XmlContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat GetMessageFormatForContentType(string contentType)
    {
        return WebContentFormat.Raw;
    }
}
于 2012-09-07T17:55:58.497 に答える