【问题标题】:Error when calling WCF service from Silverlight application?从 Silverlight 应用程序调用 WCF 服务时出错?
【发布时间】:2012-04-15 13:14:34
【问题描述】:

我从 Silverlight 应用程序调用服务并收到跨域策略错误。我将clientaccesspolicy.xml 放在与xap.file 相同的文件夹中。

http://msdn.microsoft.com/en-us/library/cc197955%28v=vs.95%29.aspx

尝试向 URI 'http://localhost/Service1.svc' 发出请求时出错。这可能是由于试图 在没有适当跨域的情况下以跨域方式访问服务 策略,或不适合 SOAP 服务的策略。你 可能需要联系服务的所有者发布跨域 策略文件,并确保它允许与 SOAP 相关的 HTTP 标头 发送。此错误也可能是由于在 web 中使用内部类型引起的 不使用 InternalsVisibleToAttribute 属性的服务代理。 请参阅内部异常了解更多详情

【问题讨论】:

    标签: wcf silverlight


    【解决方案1】:

    clientaccesspolicy.xml 应该在托管服务的域的根文件夹中(例如http://mydomain.com/crossdomainpolicy.xml,而不是在 xap 文件的目录中。

    在您链接到的页面中已明确说明:

    将 clientaccesspolicy.xml 文件放在域的根目录中 托管服务以配置服务以允许跨域 访问。

    【讨论】:

      【解决方案2】:

      您是否制作了网络服务或使用了第三方网络服务?您提到的http://msdn.microsoft.com/en-us/library/cc197955%28v=vs.95%29.aspx 的文章仅适用于您是制作网络服务的人。

      您遇到的是站点 SOS 错误。如果您尝试使用第三方 Web 服务并且他们不使用客户端访问策略,您可以通过创建 Web 服务的包装器来解决此问题。基本上,您必须创建一个 Web 服务,并将其托管在与您的 silverlight 应用程序相同的原始站点。然后,您的 Web 服务将调用第三方 Web 服务并相应地返回值。

      由于 Silverlight 应用程序的沙盒安全规则,它们只能与来自同一原始站点的 Web 服务进行通信,除非将 ClientAccessPolicy 应用于 Web 服务,以便将其打开以供原始站点外部使用。同样,如果您不是托管 Web 服务的人,您可能无法对此进行任何控制。

      SOS 适用于主机名、端口和协议。所以http://localhost/ 不同于https://localhost/http://localhost:9999/ 不同于http://localhost:80/

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        相关资源
        最近更新 更多