Операция '' контракта '' указывает несколько запросить параметры тела сериализован без оболочки элементы. Не более одного параметра тела может быть сериализована без обертки элементы. Либо удалите лишнее тело параметров или установить BodyStyle собственности на WebGetAttribute/WebInvokeAttribute для Облаченный.
Я пытаюсь открыть службу WCF С# 4.0 с помощью JSON через следующую конфигурацию (установленную с помощью редактора конфигурации WCF):
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="iPhoneAPI.API">
<endpoint address="" behaviorConfiguration="NewBehavior0" binding="webHttpBinding"
bindingConfiguration="" contract="iPhoneAPI.IApi" />
</service>
</services>
<protocolMapping>
<add scheme="http" binding="webHttpBinding" bindingConfiguration="" />
</protocolMapping>
<behaviors>
<endpointBehaviors>
<behavior name="NewBehavior0">
<webHttp defaultOutgoingResponseFormat="Json" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Когда я обращаюсь к /API.svc, я получаю сообщение об исключении, указанное ранее.
Если я укажу только следующий (без параметра) контракт, служба работает:
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "test")]
GenericApiResult<IEnumerable<LiveFeedEntity>> test();
Если у меня есть методы, для которых требуются параметры, не являющиеся строками, я получаю исключение, указанное ранее.
Пример:
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "login")]
LoginApiResult Login(String UserName, String Password);
Если я изменю эту функцию следующим образом:
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "login/{UserName}/{Password}")]
LoginApiResult Login(String UserName, String Password);
Это работает; но это возможно только для параметров типа String. Как мне отрегулировать это для моих других функций, таких как:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "logout")]
GenericApiResult<bool> Logout(Guid SessionKey);
Пробовал много поисковых запросов Google, но оказался пустым, любая помощь была оценена.
Приветствия,
Ник.