我在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
答案 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