我有一个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。
答案 0 :(得分:0)
好的,我发现了问题所在。
我已将这两项服务添加为“旧”Web服务。我删除了它们,并再次添加回来,这次作为标准服务参考。
之后,我能够获得一个“myServiceSoapClient”和一个“myAuthSoapClient”,它们具有InnerChannel属性,这是我需要的,以便检索安全令牌cookie。
通过从身份验证服务(验证后)获取cookie并在第二个服务(实际服务)中设置它,我能够访问我应该访问的所有方法。
干杯, 詹卢卡。