我在asp.net Web应用程序上托管了一个silverlight应用程序,包括一个WCF SOAP Web服务。应用程序使用SSL在HTTPS:// ...链接下运行。当我在运行IIS 7.5的测试服务器上部署它时,一切正常并且符合预期。 我还有第二个Web应用程序,包括RESTful WCF服务,该服务在我的本地计算机和提到的测试服务器上使用SSL运行(但在这种情况下没有使用Silverlight客户端)。
我的问题是,在应该进行反序列化的部分中获取SOAP服务的响应时,silverlight客户端会收到安全性错误,但只能在我的本地计算机上。
return base.Channel.EndGet...(IAsyncResult) // <-- exception reported here:
System.ServiceModel.CommunicationException: An error occurred while trying to make a request to URI 'https://localmachinename.domain.com:8000/Service.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error. at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) at System.Net.Browser.BrowserHttpWebRequest.c__DisplayClassa.b__9(Object sendState) at System.Net.Browser.AsyncHelper.c__DisplayClass4.b__0(Object sendState) --- End of inner exception stack trace --- at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) --- End of inner exception stack trace --- at System.ServiceModel.Channels.Remoting.RealProxy.Invoke(Object[] args) at proxy_2.EndGetTypes(IAsyncResult ) at NameSpace.ClientClass.ServiceContractInterfaceImplementation.EndGetTypes(IAsyncResult result)
我的SOAP服务的clientaccesspolicy.xml如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
任何提示我做错了什么? 部署的应用程序在我们的测试Web服务器上运行良好。
2012年12月6日:问题仍然存在。一些更新/更多信息:
Web服务使用Windows身份验证和模拟。测试服务器和本地计算机之间的唯一区别是应用程序池在不同的身份下运行,在两种情况下都是技术域用户。我发现的唯一区别是我的本地计算机上的用户未被授予Active Directory中的“受信任的委派”标志。所以我认为它可能是一个Kerberos问题。但是,当我运行我的Restful WCF服务和客户端时,这从来都不是问题。此外,使用Windows窗体客户端进行SOAP服务,一切都在我的本地机器上运行良好,开发/调试就可以按预期进行。
所以它必须是一个Silverlight问题。
我没有得到的是,假设这个可怕的安全性错误是由跨域策略问题引起的,就像大多数情况下那样,这些域在哪里交叉?一切都应该在本地机器上幸福,没有其他服务被称为。使用IIS Express不应该发生这种情况,不是吗?
有人能帮忙吗?
答案 0 :(得分:0)
clientaccesspolicy.xml应放在 wwroot 文件夹中,还包括crossdomain.xml
答案 1 :(得分:0)
如果您在解决方案中有多个启动项目,请确保您正在运行您的服务和正确的Silverlight项目。我有两个silverlight项目,并且启动了一个不包含clientaccesspolicy.xml的错误项目。