WCF如何在非80端口请求跨域文件

night_edge 2014-01-02 10:17:30
简单介绍一下项目先,wcf服务单独部署,单双工都有用到,单工用来查询数据库,双工用来给界面推送实时数据。WEB与WCF分开部署,但都映射到外网,WEB80映射到外网端口62361 WCF单双工 4505 4506 也都分别映射到外网端口 4505 4506。
问题:由于wcf默认会向80端口请求跨域文件,但是端口都做了映射,外网的80端口是被屏蔽的,所以就会出现跨域问题,双工无法使用。
做的尝试:我曾经把跨域文件放到了外网端口80 对应的服务器(非我们系统服务器,协调别人做的测试),问题奇迹般的解决了,但是别的系统服务器我们是无权做任何改动的,所以在别人系统服务器上部署跨域文件是不可行的。
请求帮助:能否让wcf从别的端口获取跨域文件?比方说上面 WEB映射到外网的62361端口?如何实现?
...全文
326 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jtlyr 2014-03-17
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
假设你的客户端siverlight程序访问http服务地址是 http://www.abcdef.com:62200/xxx.html,那么首先,它需要的授权地址就是 http://www.abcdef.com:62200/clientaccesspolicy.xml。 也就是说,你的silverlight访问服务器上哪一个端口,你就需要在那个端口上(根域下)返回授权。 而不是非得80端口。
貌似授权的返回和silverlight程序的访问地址没有直接的联系吧,而是和WCF的地址有关系的。 为了使http://domainA/default.aspx托管的Silverlight可以连接到http://domainB/WCFservice托管的WCF服务,我们需要显式配置一个跨域选择策略,即clientaccesspolicy.xml或crossdomain.xml。例如:如果我们的WCF服务发布为:http://domainB/WCFservice.svc,那么跨域策略应该可以通过http://domainB/clientaccesspolicy.xml访问。 参考:http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/silverlight-wcf.aspx 另外,943端口在silverlight4中使用,5中已做了调整。 请大虾对此问题讨论下,看看有没有好的解决方案,这个问题还是很有意义的。
night_edge 2014-01-07
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
假设你的客户端siverlight程序访问http服务地址是 http://www.abcdef.com:62200/xxx.html,那么首先,它需要的授权地址就是 http://www.abcdef.com:62200/clientaccesspolicy.xml。 也就是说,你的silverlight访问服务器上哪一个端口,你就需要在那个端口上(根域下)返回授权。 而不是非得80端口。
可能我理解有误,请再看一下我补充的内容,从我观察来看,系统访问地址是 210.1.1.1:62361/myweb,但是跟踪wcf双工登陆时,请求的地址却是 210.1.1.1/clientaccesspolicy.xml。根本没有指定端口号。只有是用到双工时才有这个问题,平常使用单工或者webservice连接数据库查询等都不会遇到问题。 如果如您所说,那怎么解释我在210.1.1.1 这个地址对应的服务器下部署上跨域文件,双工就可用了呢? (再次说明一下,210.1.1.1这个地址对应的是一台非我们系统的服务器,210.1.1.1:62361这个地址端口才是我们web服务器) 可能真是我理解有误,80端口的确是我根据程序跟踪推测的,平常单工查询数据库什么的都是没问题的,只有在双工登录时才会出现这个问题。
  • 打赏
  • 举报
回复
引用 2 楼 KumaPower 的回复:
“由于wcf默认会向80端口请求跨域文件”,哪里看的资料?我听得最多的是,如果是socket通信,请求的跨域文件是需要943端口,而其他资源的访问,是把跨域文件放到silverlight程序所在的网站根目录(大概是什么根目录的,至少很少听过一定要放在80端口什么的)。
是这样的。 往往纠结的人,不是因为知道的少了,而是知道的“太多了”,出现了奇怪的理由。
  • 打赏
  • 举报
回复
你可以反观一下你们设计,什么又“外网80端口影射.....”,又说“部署在80端口不可行”,我都被你搞糊涂了。你们既然把自己的WCF部署在80端口,怎么反过来又说“80端口不可行”呢? 不过不管你们的所谓部署是什么,先搞懂我上面所说的道理,就少一些纠结。
  • 打赏
  • 举报
回复
假设你的客户端siverlight程序访问http服务地址是 http://www.abcdef.com:62200/xxx.html,那么首先,它需要的授权地址就是 http://www.abcdef.com:62200/clientaccesspolicy.xml。 也就是说,你的silverlight访问服务器上哪一个端口,你就需要在那个端口上(根域下)返回授权。 而不是非得80端口。
night_edge 2014-01-03
  • 打赏
  • 举报
回复
我做了一个测试,先假设系统80端口映射出去的外网IP和端口为 210.1.1.1:62361 那访问web的地址就是 210.1.1.1:62361/myweb 但是WCF请求跨域文件的时候是向哪里请求呢?我用Chrome F12跟踪一下,发现是向210.1.1.1这个地址请求,并没有加特定端口号,也就是说指向了这个外网IP 80端口映射的服务器(正好是其他系统服务器),但是这个服务器的根目录是没有跨域文件的,所以请求失败,WCF无法运行。 于是我在他们服务器上部署上跨域文件,WCF就正常了。 A系统需要用到B系统的服务器,相当于两个不相干的系统有了交集,肯定是不可以的,以后会有很多麻烦,于是有了上面的提问。
night_edge 2014-01-03
  • 打赏
  • 举报
回复
跨域文件是要放在网站根目录,大部分是wwwroot下,而据我观察,请求跨域文件的方式是使用IP地址进行的,那就是使用默认端口80了。目前没有找到能改变,或者手动设置它请求跨域文件使用的端口。
Bonjour-你好 2014-01-02
  • 打赏
  • 举报
回复
“由于wcf默认会向80端口请求跨域文件”,哪里看的资料?我听得最多的是,如果是socket通信,请求的跨域文件是需要943端口,而其他资源的访问,是把跨域文件放到silverlight程序所在的网站根目录(大概是什么根目录的,至少很少听过一定要放在80端口什么的)。
jiaoshiyao 2014-01-02
  • 打赏
  • 举报
回复
貌似做不到- -

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧