Операция '' контракта
'' указывает несколько
параметры тела запроса должны быть
сериализованный без какой-либо обертки
элементы. Максимум один параметр тела
можно сериализовать без оболочки
элементы. Либо удалить лишнее тело
параметры или установить BodyStyle
собственность на
WebGetAttribute / WebInvokeAttribute to
Облаченный.
Я пытаюсь открыть службу WCF C # 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);
Перепробовал много поисков в гугле, но оказался с пустыми руками, любая помощь приветствуется.
Приветствия
Ник.