加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Sliverlight调用WebService跨域问题解决

发布时间:2020-12-16 22:56:22 所属栏目:安全 来源:网络整理
导读:在SilverlightApplication正常添加webservice(承载网站中建webservice,这样就不存在跨域问题了,即域名一样如:localhost:4676) http://localhost:4676/Service1.svc (不用管是wcf,amxl,或是java的接口) xmal.cs中 ??? public ?MainPage() ???{ ???Initializ

在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

< 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读