WCF跨域 这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP...

尝试向 URI“http://localhost:8001/AccountService.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。有关详细信息,请参阅内部异常。

解决方法:

  一、在WCF项目根目录下添加clientaccesspolicy.xml文件

 重点,跨域文件一定要放对地方,位置一定是网站根目录,比如你在根目录发布的是一个虚拟目录,那么这个文件在虚拟目录里是不行的,一定要在根目录(http://域名/clientaccesspolicy.xml 这样可以访问到才行),如果是虚拟的web服务器咋整,这个我也不知道怎么弄,晕。。。。。。。。。(只要http://域名/clientaccesspolicy.xml可以访问应该就可以)

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

二、在silverlight项目中添加一个中介类ServerManager.cs

 

Code publicclass ServerManager      {         privatestatic ServiceWcfClient servicePicture =new ServiceWcfClient();
       
internalstatic ServiceWcfClient GetPox()          {             if (servicePicture.State == System.ServiceModel.CommunicationState.Created)              {                  servicePicture.Endpoint.Address =new System.ServiceModel.EndpointAddress("http://localhost:52207/ServiceWcf.svc");                 return servicePicture;              }             else              {                 return servicePicture;              }          }      }

三、实例化实体类的时候一般是这样:ServiceWcfClient clientWcf = new ServiceWcfClient();

换成:ServiceWcfClient clientWcf = ServerManager.GetPox();

注:方法一就OK了,经过测试。

SilverLight跨域访问及其常用的几种解决方法

 

今天在做silverlight访问JSon数据的时候老是出现错误,才发现是跨域的问题,因此将这方面的内容整理一些,列了出来

SilverLight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源。
下表列出了Silverlight 2.0 中 URL 访问规则:

 WebClient对象Media、images、ASXXAML 文件、Font 文件流媒体
允许的协议HTTP, HTTPSHTTP, HTTPS, FILEHTTP, HTTPS, FILEHTTP
跨协议访问不允许不允许不允许不允许来自HTTPS的访问
跨Web域访问不允许如果不是来自HTTPS则允许不允许允许
跨安全区域访问(Windows)不允许不允许不允许不允许
跨安全区域访问(Macintosh)不允许允许不允许允许
允许重定向同域允许允许同域允许不允许

如果WCF与SilverLight Web不是在同一站点,那么我们就要在被访问端的根域放上两个XML文件clientaccesspolicy.xml,crossdomain.xml 如果要通过WebClinet访问另一站点的资源,那么需要在被访问站点放上域访问策略xml文件,不然在Complete事件里面的事件参数报告空对象引用。

clientaccesspolicy.xml文件格式如何,切忌最好要将编码设置为utf-8,否则极易出错

<?xmlversion="1.0"encoding="utf-8"?>

<access-policy>   

<cross-domain-access>     

<policy>       

<allow-fromhttp-request-headers="*">         

<domainuri="*"/>       

</allow-from>       

<grant-to>         

<resourcepath="/"include-subpaths="true"/>       

</grant-to>     

</policy>   

</cross-domain-access> </access-policy>

 

crossdomain.xml文件格式

crossdomain.xml的格式非常简单,其根节点为<cross-domain-policy> ,其下包含一个或多个<allow-access-from>节点,<allow-access-from>有一个属性domain,其值为允许访问的域,可以是确切的 IP 地址、一个确切的域或一个通配符域(任何域)。下边是两个例子:

程序代码

 <?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="http://www.lishewen.com.cn/" /> <allow-access-from domain="*.lishewen.com.cn" />

<allow-access-from domain="222.217.221.16" />

</cross-domain-policy>

程序代码

<?xml version="1.0"?>

<cross-domain-policy> <allow-access-from domain="*" />

</cross-domain-policy>

第二个例子允许任何域的访问。对于crossdomain.xml文件存放位置,建议将其存放于站点根目录中!

如:http://bbs.lishewen.com.cn/crossdomain.xml

在这我也弄了个Silverlight的例子来测试

http://silverlight.lishewen.net.cn/SyndicationFeedReader/

关于clientaccesspolicy.xml,crossdomain.xml的具体说明,请大家参看MSDN http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx

文章整理资料来源于:http://www.cnblogs.com/format/articles/1282203.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值