Sliverlight调用WebService跨域问题解决
2015-04-10 14:17
351 查看
在SilverlightApplication正常添加webservice(承载网站中建webservice,这样就不存在跨域问题了,即域名一样如:localhost:4676)
http://localhost:4676/Service1.svc (不用管是wcf,amxl,或是java的接口)
xmal.cs中
public MainPage()
{
InitializeComponent();
ServiceReference1.bizservicePortTypeClient bt = new ServiceReference1.bizservicePortTypeClient();
bt.AddCompleted+=new EventHandler<ServiceReference1.AddCompletedEventArgs>(bt_AddCompleted);//注册方法获取返回值
bt.AddAsync(1, 99);//调用webservice
}
public void bt_AddCompleted (Object sender,ServiceReference1.AddCompletedEventArgs e)
{
this.textBlock1.Text=""+e.Result;
}
然后执行http://localhost:4676/SilverlightApplication4TestPage.aspx
但是如果引用其他地方的服务就存在跨域问题了,因为跨域了,所以出现下面
尝试向 URI“http://localhost:8081/Service1.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。有关详细信息,请参阅内部异常。
解决办法( 自己有服务端的控制权限)加了2ge文件:
如果没用,那就要检查文件是否写错了,我犯过这种错误
如:http://localhost:8082/clientaccesspolicy.xml 都能识别为xml,然后找问题找了2天,最后发现是文件出错了(文件内容跟文件名都正确),而且我还另存了改为utf-8格式还是不行,最后在网上找了个源码,把这个文件覆盖了,就一切正常了,至今我也不知道是哪里错了(这2个内容都是网上找的,然后 copy过来的)
在webservie中的根目录加入 下面这2个文件(其实是先找第一个,只要有第一个就可以了,找到第一个第二个就不用了)
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-header="*">
<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"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
2,如果没有服务端权限呢(即无法再服务端目录加上2个xml)?其实也很简单在上面就能找到解决办法了
在承载网站中建webservice,然后这个webservice中调用要调用的webservice
ps: <allow-from http-request-header="*"> 改为<allow-from http-request-headers="*">
本文来自ytmf007的博客,原文地址:http://blog.csdn.net/ytmf007/article/details/7597103
http://localhost:4676/Service1.svc (不用管是wcf,amxl,或是java的接口)
xmal.cs中
public MainPage()
{
InitializeComponent();
ServiceReference1.bizservicePortTypeClient bt = new ServiceReference1.bizservicePortTypeClient();
bt.AddCompleted+=new EventHandler<ServiceReference1.AddCompletedEventArgs>(bt_AddCompleted);//注册方法获取返回值
bt.AddAsync(1, 99);//调用webservice
}
public void bt_AddCompleted (Object sender,ServiceReference1.AddCompletedEventArgs e)
{
this.textBlock1.Text=""+e.Result;
}
然后执行http://localhost:4676/SilverlightApplication4TestPage.aspx
但是如果引用其他地方的服务就存在跨域问题了,因为跨域了,所以出现下面
尝试向 URI“http://localhost:8081/Service1.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。有关详细信息,请参阅内部异常。
解决办法( 自己有服务端的控制权限)加了2ge文件:
如果没用,那就要检查文件是否写错了,我犯过这种错误
如:http://localhost:8082/clientaccesspolicy.xml 都能识别为xml,然后找问题找了2天,最后发现是文件出错了(文件内容跟文件名都正确),而且我还另存了改为utf-8格式还是不行,最后在网上找了个源码,把这个文件覆盖了,就一切正常了,至今我也不知道是哪里错了(这2个内容都是网上找的,然后 copy过来的)
在webservie中的根目录加入 下面这2个文件(其实是先找第一个,只要有第一个就可以了,找到第一个第二个就不用了)
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-header="*">
<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"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
2,如果没有服务端权限呢(即无法再服务端目录加上2个xml)?其实也很简单在上面就能找到解决办法了
在承载网站中建webservice,然后这个webservice中调用要调用的webservice
ps: <allow-from http-request-header="*"> 改为<allow-from http-request-headers="*">
本文来自ytmf007的博客,原文地址:http://blog.csdn.net/ytmf007/article/details/7597103
相关文章推荐
- JQuery ajax调用webservice跨域问题解决办法
- (转)jquery跨域调用webService,以及解决跨域情况下只能返回XMl格式数据的问题
- Flex跨域调用Webservice 问题 解决 Channel.Security.Error
- Cordys HTML JS调用 Webservice 解决跨域问题
- silverlight调用webservice跨域导致问题的解决方法
- 自定义WebSerivce作为代理解决SilverLight跨域调用WebService问题
- Silverlight 2 Beta2调用WebService跨域问题解决方案
- 解决 Silverlight 调用 WCF 服务 跨域访问 和 Silverlight 引用服务后配置文件不加载的问题
- 调用webservice超时问题的解决
- Java调用.Net WebService问题,以及参数为空解决办法
- 调用webservice超时问题的解决
- cxf调用.net webservice 接口遇到的问题(尚未解决)
- Flex跨域调用Webservice问题
- Dephi调用C#编写的WebService的一些问题与解决
- Dephi调用C#编写的WebService的一些问题与解决 (转)
- Websharp框架 在Win2003环境下 WinForm程序无法调用WebService问题解决
- Dephi调用C#编写的WebService的一些问题与解决
- 非托管C++调用 Webservice,如何解决状态保持的问题
- Dephi调用C#编写的WebService的一些问题与解决方法
- Silverlight调用WebSite类型的WebService,Debug时的跨域问题