Операция "GetNotesByDate" контракта "INoteService" задает несколько параметров текста запроса, которые должны быть сериализованы без каких-либо элементов оболочки.
Столкнулся с такой проблемой: при попытке вызвать со стороны веб-клиента веб-сервис, получаю ошибку со следующим содержанием:
Операция "GetNotesByDate" контракта "INoteService" задает несколько параметров текста запроса, которые должны быть сериализованы без каких-либо элементов оболочки. Самое большее один параметр текста может быть сериализован без элементов оболочки. Либо удалите лишние параметры текста, либо задайте для свойства BodyStyle в WebGetAttribute/WebInvokeAttribute значение Wrapped..
Последовав совету этой ошибки я добавил атрибут BodyStyle в интерфейс моего WCF-сервиса:
Код:
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/notes/{userId}")]
List<Note> GetAllNotes(string userId);
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "notes/{userId}/{date}")]
List<Note> GetNotesByDate(String userId, String date);
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/notes/{userId}")]
List<Note> GetAllNotes(string userId);
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "notes/{userId}/{date}")]
List<Note> GetNotesByDate(String userId, String date);
Причем, самое интересное то, что я вызываю не тот метод, на который жалуется IIS, а первый из представленного выше листинга (там где один параметр)
Вызываю веб-сервис следующим образом:
Код:
ServiceReference1.NoteServiceClient client = new NoteServiceClient();
List<note> allNotes = client.GetAllNotes("3").ToList();
List<note> allNotes = client.GetAllNotes("3").ToList();
Заранее спасибо!
На всякий случай приведу часть файла web.config от веб -клиента, быть может именно в нем я и ошибся:
Код:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="WebHttpBinding_INoteService">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost:1095/NoteService.svc" binding="webHttpBinding" bindingConfiguration="WebHttpBinding_INoteService"
contract="ServiceReference1.INoteService" name="WebHttpBinding_INoteService" behaviorConfiguration="webHttp">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="WebHttpBinding_INoteService">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost:1095/NoteService.svc" binding="webHttpBinding" bindingConfiguration="WebHttpBinding_INoteService"
contract="ServiceReference1.INoteService" name="WebHttpBinding_INoteService" behaviorConfiguration="webHttp">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>