Я использую веб-сервис WCF с сервера, над которым у меня мало контроля.Методы, не возвращающие никаких данных, запускают HTTP-код 204, что совершенно нормально с точки зрения HTTP, однако у меня есть проблема с обработкой ответа самим WCF (все другие методы, возвращающие 400, работают нормально).
Вот мой методобъявление:
[OperationContract]
[WebInvoke(UriTemplate = "methodpath/V1",
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
void Operation1(
[MessageParameter(Name = "username")]
string userName,
[MessageParameter(Name = "password")]
string password);
Ошибка, возникающая после вызова метода: CommunicationException: Ошибка в десериализации тела ответного сообщения для операции «Операция1».OperationFormatter не удалось десериализовать какую-либо информацию из сообщения, поскольку сообщение пустое (IsEmpty = true).
Также пытались с IsOneWay = true: InvalidOperationException: односторонняя операция вернула ненулевое сообщение с Action =''.
Вот необработанный HTTP-ответ:
HTTP/1.1 204 No Content
Set-Cookie: ...
Content-Length: 0
Connection: Close
Date: Mon, 21 Mar 2011 18:41:37 GMT
трассировка стека исключений:
трассировка стека серверов:
at System.ServiceModel.Dispatcher.PrimitiveOperationFormatter.DeserializeReply(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.DemultiplexingClientMessageFormatter.DeserializeReply(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.CompositeClientFormatter.DeserializeReply(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Будетблагодарен всем, кто знает, как заставить WCF изящно принять ответ.