通过SOAP公开的RIA AuthenticationDomainService和CustomDomainService

时间:2011-02-15 11:02:20

标签: c# ria wcf-ria-services

我有一个RIA服务(CustomDomainService),它由几个需要身份验证的方法组成。身份验证由身份验证服务(AuthenticationDomainService)提供。一切都来自Silverlight,它是主要客户。

我现在需要通过SOAP公开一些现有的方法。因此我改变了我的web.config配置以允许通过SOAP访问:

<domainServices>
  <endpoints>
    <add name="soap" type="Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, 
                           Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, 
                           Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </endpoints>
</domainServices>

在我为测试目的而构建的Windows窗体应用程序中,我添加了对SOAP Web服务的引用。

我可以在没有任何错误的情况下登录身份验证服务,但对于实际服务上的任何Web方法调用,我仍然会获得“拒绝访问”:

var auth = new myAuth.AuthenticationDomainService();
auth.Login("username", "password", true, false, "");
var svc = new myService.myDomainService();
var res = svc.GetDataByCustomerCode("", DateTime.Now, true, DateTime.Now, true);

我读到认证服务应该返回一些cookie,那些应该在实际的业务服务中使用。但是在调用Login后,我在auth.CookieContainer中看不到任何cookie。此外,我没有任何InnerChannel属性,我可以使用它来获取指定的cookie。

有人能指出我做错了什么吗?

提前致谢, 干杯, -G。

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题所在。

我已将这两项服务添加为“旧”Web服务。我删除了它们,并再次添加回来,这次作为标准服务参考。

之后,我能够获得一个“myServiceSoapClient”和一个“myAuthSoapClient”,它们具有InnerChannel属性,这是我需要的,以便检索安全令牌cookie。

通过从身份验证服务(验证后)获取cookie并在第二个服务(实际服务)中设置它,我能够访问我应该访问的所有方法。

干杯, 詹卢卡。