Если я правильно прочитал этот контракт, вы определили JSON как ваш формат ответа , но не ваш запрос формат:
[ServiceContract]
public interface IAuthenticator
{
[OperationContract]
[WebInvoke(UriTemplate = "AuthenticateUser", Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json)]
AuthPacket AuthenticateUser(string Username, string Password, string DeviceId);
}
Может ли это быть проблемой? Что произойдет, если вы добавите RequestFormat = WebMessageFormat.Json
к своему операционному контракту ??
[ServiceContract]
public interface IAuthenticator
{
[OperationContract]
[WebInvoke(UriTemplate = "AuthenticateUser", Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json, <== ADD THIS HERE TO YOUR CODE !
ResponseFormat = WebMessageFormat.Json)]
AuthPacket AuthenticateUser(string Username, string Password, string DeviceId);
}
Обновление: , если вы используете WCF 4 "из коробки", его сопоставление протокола свяжет схему http://
с basicHttpBinding
.
Чтобы это исправить, вам нужно переопределить сопоставление протокола по умолчанию, как это (в вашем web.config):
Отображение протокола по умолчанию
Ответ на этот вопрос прост. WCF определяет сопоставление протокола по умолчанию между схемами транспортного протокола (например, http, net.tcp, net.pipe и т. Д.) И встроенными привязками WCF. Сопоставление протокола по умолчанию находится в файле .NET 4 machine.config.comments и выглядит следующим образом:
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="webHttpBinding" bindingConfiguration="" />
</protocolMapping>
Теперь по умолчанию http://.....
будет сопоставлено с webHttpBinding
.
(взято из: Введение разработчика в Windows Communication Foundation 4 )