1

次の POST「操作」で RESTful WCF を構成しました。

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Test", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json)]
void PostTest(Stream stream);

私の web.config では、次のように構成しました。

<service name="MyTest.TestSvc" behaviorConfiguration="MyTest.TestBehavior" >
    <endpoint address="" behaviorConfiguration="MyBehavior" binding="webHttpBinding" contract="MyTest.ITestSvc"/>
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

<endpointBehaviors>
    <behavior name="MyBehavior">
        <webHttp />
    </behavior>
</endpointBehaviors>

<serviceBehaviors>
    <behavior name="MyTest.TestBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
</serviceBehaviors>

「text/plain」または「json」を使用して POST メッセージを送信すると、すべて正常に動作します。ただし、 ContentType = "application/json"で POST メッセージを送信しようとする と、次のメッセージで失敗します: リモート サーバーがエラーを返しました: (400) Bad Request

私が見つけた唯一の解決策は、Factory クラスを定義することでした: System.ServiceModel.Activation.WebServiceHostFactory int Svc 定義マークアップ。

次のリンクでこの解決策を見つけました: Send JSON to WCF 3.5 using Ajax

私が理解しているように、WebServiceHostFactory の定義は、web.config を編集したくない場合にのみ役立ちます。

WebServiceHostFactory を定義せずに機能させるにはどうすればよいですか?

「json」コンテンツ タイプの POST メッセージは取得できますが、「application/json」コンテンツ タイプは取得できないことに注意してください。

4

1 に答える 1

3

問題は、生のプログラミング モデルを (Streamパラメーターを使用して) 使用するには、要求を JSON として理解しようとせず、生の要求本文をパラメーターに渡すだけにするように WCF に指示する必要があることです。を使用してそれを行うことができますWebContentTypeMapperhttp://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspxの投稿は、これを行う方法を示しています。ファクトリを使用したソリューションは、エンドポイントを作成するときに機能するため、機能します。

于 2012-12-12T14:51:26.787 に答える