现在的位置: 首页 > 综合 > 正文

silverlight跨域调用wcf总结

2012年12月09日 ⁄ 综合 ⁄ 共 2459字 ⁄ 字号 评论关闭

最近刚装了一个VS2008,研究研究silverlight(以下简称SL)和wcf,发现调用我以前发布的一个wcf一直不成功,返回错误信息http://localhost/mywcfservice/Service2.svc不允许跨域访问.我的SL访问路径是http://localhost:8457/SilverlightApplication3.Web/SilverlightApplication3TestPage.aspx#/Home,wcf的域是http://localhost,IIS的端口默认是80,http://localhost:80和http://localhost:8457显然是两个不同的域。然后习惯性的开始了百度之旅。查了很多资料看了很多贴,都说是跨域访问的问题,sl默认不允许跨域访问wcf,若需要跨域,则必须配置跨域策略,sl跨域策略文件名clientaccesspolicy.xml,内容如下 ,于是很多人会问:那么这个文件放在什么位置呢?这个文件必须放在IIS的根目录下,而不是你的SL网站虚拟目录下。例如你的IIS根目录一般都是C:/Inetpub/wwwroot,而你的网站虚拟目录可能是D:/testwebsite,此文件则需要放在C:/Inetpub/wwwroot而不是后者,这是第一个要注意的地方。

此时跨域策略已经配置,按道理应该就能访问WCF了,可是仍然报错了:远程服务器错误:NOT FOUND。哥当时就震惊了,然后用Fiddler软件跟踪web请求和响应,发现请求是有发送出去的,请求地址也是对的,可是出现下列错误:HTTP/1.1 415 Cannot process the message because the content type 'application/soap+msbin1' was not the expected type 'application/soap+xml; charset=utf-8'.然后继续网上查资料啊,好多都是E文的,看的哥蛋疼,后面半知半解的看到一个E文里说是服务器端的终结点的绑定和客户端的终结点的绑定不一致导致的,然后我仔细检查了一下,发现我服务端发布的WCF服务的终结点的binding是wsHTTPBinding,而SL客户端代理类调用时配置的Binding是custombinding,确实是不一致的,但好像SL3.0客户端配置里不支持wsHTTPBinding,好像只支持customBinding和basicHttpBinding,于是我把服务端和客户端的binding都改成了basicHttpBinding,然后重新发布服务端,更新客户端服务引用,运行SL程序,调用WCF服务,成功了!!困扰了我一天的问题原来如此简单,希望对跟我一样刚接触这方面的知识的人有所帮助。

SL客户端 ServiceReferences.ClientConfig配置如下:http://localhost/mywcfservice/Service2.svc是我发布在IIS上的WCF服务的地址.

 

WCF服务端配置如下:

抱歉!评论已关闭.