Я настроил RESTful WCF со следующей «операцией» POST:
[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>
Когда я отправил сообщение POST, используя "text/plain" или "json", все работает нормально. Однако, когда я пытаюсь отправить сообщение POST с ContentType = "application/json", происходит сбой со следующим сообщением: Удаленный сервер вернул ошибку: (400) Неверный запрос >
Единственное решение, которое я нашел, состояло в том, чтобы определить класс Factory: System.ServiceModel.Activation.WebServiceHostFactory в разметке определения Svc.
Я нашел это решение по следующей ссылке: Отправить JSON в WCF 3.5 с помощью Ajax
Как я понял, определение WebServiceHostFactory полезно только в том случае, если вы не хотите редактировать файл web.config.
Как я могу заставить его работать без определения WebServiceHostFactory?
Обратите внимание, что мне удалось получить POST-сообщение типа содержимого «json», но не тип содержимого «application/json».