次の 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」コンテンツ タイプは取得できないことに注意してください。