0

我知道这个问题已经回答了很多次,但由于某种原因我无法解决。我希望有人可以解决我的问题,这对许多人来说可能很简单,但我有些无法弄清楚,因为我对 silverlight 和 web 还比较陌生。我已经尝试了互联网上所有可能的跨域错误示例,但无法修复它。如果有任何一次可以帮助我解决我面临的这个问题,我将不胜感激。

我正在从 Silverlight 4 客户端访问 WCF 服务。我在 wwwroot 中有 Clientacccesspolicy.xml 和 Crossdomain.xml。

我可以使用 [http://localhost/Remoteapp.html] 访问我的文件。但是,当应用程序尝试进​​行 Web 服务调用时,尽管在根目录中有 Clientaccesspolicy.xml 文件,但我收到了跨域错误。

在 webdevelopementhelper 中,我可以看到正在 wcfservice 端口请求 clientaccesspolicy,该端口是 [http//localhost:600061/clientaccesspolicy.xml],这是我的服务所在的位置,我收到 502 响应 [连接失败]。

当我在浏览器中键入 [http://localhost/Clientaccesspolicy.xml] 时,我可以找到该文件。但是silverlight 在错误的位置请求策略文件。

每件事在设计时都能正常工作,但是当我将它部署到 IIS 时,我收到了这个错误。

谁能帮我解决这个问题?提前感谢每一个人。

4

4 回答 4

0

第 1 步:检查 WCF 服务主机上是否有 clientaccesspolicy.xml 文件或 crossdomain.xml 文件。

以下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>

类似的 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="*" headers="*"/>
</cross-domain-policy>

如果这不起作用,请尝试以下步骤

  1. 在部署 silverlight 应用程序的服务器上,通常在 ASP.NET 应用程序的 ClientBin 文件夹中,将 silverlight 应用程序文件 *.xap 重命名为 *.zip

  2. 提取 zip 文件的内容

  3. 编辑 ServiceReferences.ClientConfig 文件

  4. 将端点地址从 localhost 更新为托管 WCF 服务的服务器地址。

  5. 保存文件。压缩内容并重命名回 .xap

于 2013-08-23T04:31:04.523 回答
0

第 1 步:将crossdomain.xml以下代码放入您的 Web 服务托管文件夹。

<?xml version="1.0" ?>
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only"/>
    <allow-access-from domain="*"/>
    <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

第 2 步:当您添加上述 WCF Web 服务的引用时,也将相同的文件放入您的 silverlight 项目中。

第 3 步:更新您的参考并发布 silverlight 项目。

试试这些步骤。它肯定会起作用。

于 2013-08-31T11:41:35.203 回答
0

这些也是必须在 Internet Explorer 中进行的一些更改,在服务启动并运行后,现在在浏览器中测试 ClientAccesspolicy.xml 和 Crossdoaminpolicy.xml 是否可以从 Internet Explorer 访问。完成所有这些后,必须将 Microsoft Azure VM 链接添加为浏览器中的受信任站点或域

  1. 首先导航到 Internet Explorer -> Internet 选项 -> 安全 -> 本地 Intranet-> 站点

现在选中自动检测 Intranet 网络的复选框,单击高级并添加 VM 的相应站点 URL

  1. Internet Explorer -> Internet 选项 -> 安全 -> 受信任的站点,添加 SP2013 URL 作为添加的 URL

现在在同一个窗口中单击自定义级别启用所有 .Net 框架、Active X 控件、启用 .Net 框架设置

  1. 现在移动到高级选项卡并取消选中禁用脚本调试(Internet Explorer),禁用脚本调试(其他)

在同一个选项卡中,我们还需要启用一些选项,它们是允许 CD 中的活动内容在我的计算机上运行,​​允许活动控件在我的计算机上的文件中运行,启用本机 XMLHTTP 支持。

完成所有这些后,检查 Sliverlight 应用程序是否正常运行。确保这些步骤是否正确处理,应用程序将完美运行。

于 2016-10-28T06:06:03.503 回答
0

我也遇到了同样的问题,经过一周的跟踪后,我知道在根目录中有 ClientAcessPolicy.xml 和 CrossDomainPolicy.xml 将无法满足您的请求,必须通过服务发送 ClientAcessPolicy.xml 和 CrossDomianPolicy.xml只要。

请按照以下步骤解决此问题

  1. 在 Iservice1.cs 中添加一个新的 NameSpace 如下图

    [ServiceContract(Namespace = "http://ServiceWCF")]
    
    public interface IPolicyRetriever
     {
       [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    
       Stream GetSilverlightPolicy();
    
       [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]
    
       Stream GetFlashPolicy();
     };
    
  2. 现在编辑 Service1.svc 文件,

    public class PolicyClass : IPolicyRetriever
    {
        Stream StringToStream(string result)
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream(Encoding.UTF8.GetBytes(result));
        }
        public Stream GetSilverlightPolicy()
        {
            string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
                            <access-policy>
                                <cross-domain-access>
                                    <policy>
                                        <allow-from http-request-headers=""*"">
                                            <domain uri=""*""/>
                                        </allow-from>
                                        <grant-to>
                                            <resource path=""/"" include-subpaths=""true""/>
                                        </grant-to>
                                    </policy>
                                </cross-domain-access>
                            </access-policy>";
            return StringToStream(result);
        }
        public Stream GetFlashPolicy()
        {
            string result = @"<?xml version=""1.0""?>
                            <!DOCTYPE cross-domain-policySYSTEM""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"">
                            <cross-domain-policy>
                                <allow-access-from domain=""*"" />
                            </cross-domain-policy>";
            return StringToStream(result);
        }
    }
    
  3. 现在在项目位置添加两个文件

  4. 更好地避免一些问题,我们也可以在根文件夹中添加文件
于 2016-10-25T09:56:16.173 回答