2011-06-24 94 views
2

我看到了这个问题上的一些线程,但没有人为我工作。我有一个简单的Silverlight应用程序。我使用WCF服务。当我从服务调用方法GetOrderList时,出现以下错误:Silverlight WCF问题与跨域策略文件

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

这里是我的代码:

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> 

当我运行小提琴手,它发现了“clientaccesspolicy.xml”与200 OK(文本/ XML),所以我知道是找到该文件。

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

任何想法?

+0

在提琴手,你看到的请求将服务本身?如果是这样,服务的回应是什么? – carlosfigueira

+0

我看到https协议..它是正确的?尝试使用http协议并在您的clientconfig文件中使用httpbinding –

回答

0

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

0

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

您是否尝试过明确添加https://开头*的URI您的跨域策略文件:

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

如果需要支持http,再加入两个:

<domain uri="http://*"/> 
<domain uri="https://*"/> 
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

感谢.....

+0

另请参阅:http://www.byteblocks.com/post/2010/03/09/Silverlight-Cross-Domain-Web-Service-Access-Error.aspx –

+0

我欣赏不错的发现 –