我使用的是VSTS 2008 + C#+ WCF + .Net 3.5 + Silverlight 3.0。我在一个html页面中托管Silverlight控件并从VSTS 2008调试它(按F5,然后在VSTS 2008内置的ASP.Net开发Web服务器中运行),然后调用另一个WCF服务(托管在运行IIS 7.0 + Vista的另一台机器上) 。 WCF服务非常简单,只需向客户端返回一个常量字符串即可。
从Silverlight调用WCF服务时,我收到以下错误消息,
尝试向URI“https://LabTest/Test.svc”发出请求时发生错误。这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略。您可能需要联系服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。在不使用InternalsVisibleToAttribute属性的情况下,在Web服务代理中使用内部类型也可能导致此错误。有关更多详细信息,请参阅内部异常。
这是clientaccesspolicy.xml文件,有什么不对吗?
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*">
</domain>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"></resource>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
这可能是在黑暗中拍摄。但我记得遇到类似的情况,在vista和IIS7上本地设置WCF服务。事实证明,我必须使用baseAddressPrefixFilters更具体地在我的web.config文件中添加一些行,请阅读另一篇文章:Here。我遇到了问题,因为我的默认网站有多个主机绑定。需要*:80和www.mydomain.com:80而WCF不会那样。
我有类似的问题,但我的解决方案更简单。在我的clientConfig文件中,我的不同服务的终点地址有不同的URL。有些人有本地主机,有些人在URL中有我的机器名。一旦我让所有这些使用本地主机它修复了我的问题。
一个想法可能是使用fiddler并找到请求crossdomainpolicy xml的请求。那是失败的吗?检查它指向的地址。我用它调试了我的问题。它指向服务器的根目录,而我的crossdomainpolicy xml位于WCF项目文件夹中。