具有跨域策略文件的Silverlight WCF问题

时间:2011-06-24 15:22:18

标签: wcf silverlight-4.0

我在这个问题上看过很多线索,但没有一个对我有用。我有一个简单的silverlight应用程序。我使用WCF服务。当我从服务调用方法GetOrderList时,我收到以下错误:

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

这是我的代码:

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上的客户端访问策略文件:

<?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> 

当我运行fiddler时,它会找到带有200 OK(text / xml)的“clientaccesspolicy.xml”,所以我知道找到了该文件。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

<?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>

Silverlight Cross Domain Web Service Access Error - This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place

感谢.....

答案 1 :(得分:0)

我有类似的问题,但服务有http协议,使用.clientconfig文件解决。

答案 2 :(得分:0)

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

您是否尝试过将https:// * uri明确添加到您的跨域策略文件中:

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

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

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