WCF服务不接受多个身体参数

时间:2015-06-08 14:32:53

标签: wcf rest ria

我在asp.net网站上托管了OpenRIA WCF服务。我有一个连接到Authentiction和DomainService的WPF客户端。我在调用Login方法时遇到问题。它基本上不喜欢消息参数不是" Wrapped"。请参阅下面的错误消息

未处理的类型' System.InvalidOperationException'发生在OpenRiaServices.DomainServices.Client.dll中的附加信息:操作'登录'合同' IPatientAuthenticationDomainServiceContract'指定要序列化的多个请求正文参数,而不包含任何包装元素。最多可以在没有包装元素的情况下序列化一个body参数。删除额外的body参数或将WebGetAttribute / WebInvokeAttribute上的BodyStyle属性设置为Wrapped。在客户端,domainClient.ChannelFactory.Endpoint.EndpointBehaviors中的WebHttpBehavior具有DefaultBodyStyle = Wrapped

托管OpenRIA服务的asp.net项目将Web行为设置为Wrapped。

<system.serviceModel>
<behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp defaultBodyStyle="Wrapped"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

我能错过什么?有没有人遇到过这个问题?

可能的解决方法是更改​​方法参数以接受复杂类型,但我无法控制AuthenticationService的Login方法。它是RIA框架提供的基类的一部分。

谢谢,

Ankur

1 个答案:

答案 0 :(得分:1)

问题已解决。只是想分享修复。我正在使用Kyle McClellan编写的SharedCookieContainer,用于在不使用浏览器内客户端时在Auth服务和域服务之间共享cookie。见http://blogs.msdn.com/b/kylemc/archive/2010/05/14/ria-services-authentication-out-of-browser.aspx

此代码中的SharedCookieBehavior是WebHttpBehavior的扩展。这个类需要在新建时将DefaultBodyStyle设置为Wrapped。简单的修复,但我花了一段时间才弄明白。

谢谢,

ANKUR