我们在远程服务器上运行WCF服务。它作为Windows服务运行,不在IIS中托管。我们可以毫无问题地从WinForms和WFP应用程序中获取此WCF服务。但是,当我们尝试从Silverlight 4应用程序中点击它时,我们会收到以下错误:
尝试向URI“http://111.111.111.111/8484/Psn”发出请求时发生错误。这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略。您可能需要联系服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。在不使用InternalsVisibleToAttribute属性的情况下,在Web服务代理中使用内部类型也可能导致此错误。有关更多详细信息,请参阅内部异常。
有人可以将其用英语解释我可以做些什么来满足Silverlight吗?
答案 0 :(得分:2)
要检查的第一件事是您在WCF服务主机上有一个clientaccesspolicy.xml
文件或crossdomain.xml
文件。这些文件中的任何一个都可用于控制哪些域可以访问您的服务。没有他们,没有人可以从Silverlight访问。这些文件位于WCF服务主机的根目录中:
例如,如果该服务托管在http://fabrikam.com中,则该文件必须位于http://fabrikam.com/clientaccesspolicy.xml ... [或] ... http://fabrikam.com/crossdomain.xml。
以下clientaccesspolicy.xml
文件将允许http://www.example.com
访问,但会阻止其他地方访问:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="http://www.example.com"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
类似的crossdomain.xml
文件将是:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-http-request-headers-from domain="http://www.example.com" headers="SOAPAction,Content-Type"/>
</cross-domain-policy>