【问题标题】:WCF and Silverlight CrossDomain.xmlWCF 和 Silverlight CrossDomain.xml
【发布时间】:2010-07-01 08:31:17
【问题描述】:

很抱歉,如果以前有人问过这个问题(我无法在任何地方找到答案),但我有一个我创建的 WCF 服务应用程序,并且正在尝试通过我的 Silverlight 4 应用程序访问。我已将服务引用添加到 SilverLight 应用程序,我只是尝试调用服务 (GetData) 上的默认预先存在的方法之一。调用该方法时出现以下错误:

尝试制作时发生错误 对 URI“我的 URI”的请求这可以 是由于试图访问 跨域服务,无需 适当的跨域策略, 或不合适的策略文件 用于 SOAP 服务。

我知道我需要一个 crossdomain.xml 文件,但是我将 crossdomain.xml 文件放在哪里似乎并不重要,我仍然收到错误,这是文件的内容:

  <?xml version="1.0" encoding="utf-8"?>
  <access-policy>
     <cross-domain-access> 
       <policy>
         <allow-from http-request-headers="SOAPAction"> 
          <domain uri="http://*"/> 
          <domain uri="https://*" />  
         </allow-from>
        <grant-to>
           <resource include-subpaths="true" path="/"/>
        </grant-to> 
       </policy>
     </cross-domain-access>
  </access-policy>

有什么想法吗?

【问题讨论】:

    标签: c# .net vb.net wcf silverlight


    【解决方案1】:

    策略文件的放置位置很重要 - 它需要放置在运行服务的 Web 服务器的“根目录”。

    http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx 上有很好的记录

    我对这些问题的最佳建议是运行 Fiddler 工具并跟踪流量,您应该会看到 Silverlight 正在寻找 clientaccesspolicy.xml 文件(以及不同格式的 crossdomain.xml 文件),这应该可以更容易确定 Silverlight 在哪里寻找文件。

    迈克。

    【讨论】:

    • 谢谢@Mike,我现在已经安装了fidler,我已经看到它在“localhost:8732”中寻找clientaccesspolicy.xml,我尝试将文件添加到“C:\inetpub\wwwroot”但我没有运气。那是我需要放置文件的地方吗? (对不起,我对网络开发还很陌生)
    • 感谢@Mike,Fiddler 调试器对 Web 开发人员来说真的很棒
    【解决方案2】:
    <?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="*" headers="*"/>
    </cross-domain-policy>
    

    这是一个非常简单的crossdomain.xml 文件。与您的相比,您似乎编写了一个clientaccesspolicy.xml 文件。将文件重命名为clientaccesspolicy.xml 就可以了。

    【讨论】:

      【解决方案3】:

      首先,这个视频有帮助吗? http://channel9.msdn.com/posts/mtaulty/Silverlight-4-Beta-Networking-Part-4-Cross-Domain-HTTP/

      其次 - 我诊断这些的方式如下;

      1) 我使用 Fiddler 确保我看到 Silverlight 请求 clientaccesspolicy.xml 文件并且它获取 clientaccesspolicy.xml - 即检查您的 Web 服务器是否返回 clientaccesspolicy.xml 并且 silverlight 没有收到“未找到”状态返回到它的请求。您可以在 Fiddler 中看到这一点。顺便说一句 - 你没有提到你是使用 IIS 还是 Cassini? IIRC "localhost" 会给提琴手带来一些问题,所以我通常使用 IIS 和正确的机器名称。

      2) 当我知道 Silverlight 肯定会得到一个 clientaccesspolicy.xml 文件时,我通常会构建我能想到的最轻松的文件版本。类似的东西;

      一旦我对它的工作感到满意,我就会将域、路径、标头和方法的列表细化到我真正需要的。

      希望对您有所帮助。

      迈克。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多