Как использовать сервис WCF в режиме REST? - PullRequest
5 голосов
/ 27 декабря 2010

Развернутая служба wcf (.net 4.0). Сервисная конфигурация выглядит так:

<endpoint address="" 
          binding="webHttpBinding" 
          bindingNamespace="https://mydomain/myservice/services"     
          behaviorConfiguration="WebBehavior"
          contract="MyService" />

<endpointBehaviors>
  <behavior name="WebBehavior">
    <webHttp />
  </behavior>
</endpointBehaviors>

При попытке использовать службу в веб-приложении web.config выглядит так:

<system.serviceModel>
    <client>      
        <endpoint name="MyServiceEndpointBasicHttp" 
                  address="http://myDomain/myService"
                  binding="webHttpBinding" behaviorConfiguration="webBehavior" 
                  contract="MyNamespace.IMyService" />
     </client>
     <behaviors>
         <endpointBehaviors>
             <behavior name="webBehavior">
                 <webHttp />       
             </behavior>     
          </endpointBehaviors>
     </behaviors>
</system.serviceModel>

Я получаю исключение при вызове службы:

Операция «Метод1» договора IMyService указывает несколько параметры тела запроса должны быть сериализованный без какой-либо обертки элементы. Максимум один параметр тела можно сериализовать без оболочки элементы. Либо удалить лишнее тело параметры или установить BodyStyle собственность на WebGetAttribute / WebInvokeAttribute to Облаченный.

После некоторого поиска в Google мы установили [WebGet(BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Xml)] для методов, но безуспешно ...

Одна интересная вещь: всегда есть одно и то же имя метода в исключении, даже если я вызываю другие методы ...

Сервис отлично работает в режиме REST при тестировании с браузером, вводя имя метода и необходимые параметры ...

1 Ответ

3 голосов
/ 27 декабря 2010

Кажется, что вы столкнулись с проблемой, подобной этой: прокси службы WCF генерирует исключение, когда в методе [OperationContract] используется более одного параметра

"Кажется, вы создали прокси-код с помощью диалогового окна Add Service Reference в VS. Диалог VS ASR не полностью поддерживает WCF REST, поэтому у прокси-кода отсутствует атрибут [WebInvoke]. Можете ли вы попробовать добавить [WebInvoke (BodyStyle) = WebMessageBodyStyle.Wrapped)] атрибут для операций в клиентском прокси? "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...