跨域策略文件的 Silverlight WCF 问题

Silverlight WCF issue with cross-domain policy file

我已经看到了很多关于这个问题的主题,但没有一个对我有用。我有一个简单的 Silverlight 应用程序。我使用 WCF 服务。当我从服务调用方法 GetOrderList 时,出现以下错误:

尝试向 URI"https://testserver2.mydomain.org/ORDERNET/WCFServices/OrderService/OrderService.svc"发出请求时出错。这可能是由于在没有适当的跨域策略或不适合 SOAP 服务的策略的情况下尝试以跨域方式访问服务。您可能需要联系服务的所有者以发布跨域策略文件并确保它允许发送与 SOAP 相关的 HTTP 标头。此错误也可能是由于在 Web 服务代理中使用内部类型而不使用 InternalsVisibleToAttribute 属性造成的。请参阅内部异常了解更多详情。

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            ServiceReference1.ServiceClient sc = new ServiceReference1.ServiceClient();
            sc.GetOrderListAsync("testuser");
            sc.GetOrderListCompleted += new EventHandler<ServiceReference1.GetOrderListCompletedEventArgs>(sc_GetOrderListCompleted);
        }

        void sc_GetOrderListCompleted(object sender, ServiceReference1.GetOrderListCompletedEventArgs e)
        {
            var RESULT = e.Result;
        }
    }

这是我放在 wwwroot 上的客户端访问策略文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>  
 
  <cross-domain-access>  
<policy>  
       
        <domain uri="*"/>  
      </allow-from>  
      <grant-to>  
        <resource path="/" include-subpaths="true"/>  
      </grant-to>  
    </policy>  
  </cross-domain-access>  
</access-policy>

当我运行 fiddler 时,它会找到带有 200 OK (text/xml) 的"clientaccesspolicy.xml",所以我知道正在查找文件。

可能是什么问题?我有无效的策略文件吗?如果我创建一个控制台应用程序并使用该服务,我可以毫无问题地调用该方法。

有什么想法吗?


1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>

  <cross-domain-access>
    <policy>
     
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

Silverlight 跨域 Web 服务访问错误 - 这可能是由于尝试以跨域方式访问服务而没有适当的跨域策略

谢谢.....


我注意到您正在使用 HTTPS (https://testserver2.mydomain.org/ORDERNET/WCFServices/OrderService/OrderService.svc)

您是否尝试过在跨域策略文件中显式添加 https://* uri:

1
<domain uri="https://*"/>

如果需要支持http,则同时添加:

1
2
<domain uri="http://*"/>
<domain uri="https://*"/>

我遇到了类似的问题,但服务具有 http 协议,这是使用 .clientconfig 文件解决的。