我一直在寻找整个网站和堆栈溢出,我只能解决我的问题。
网络设置
我的网络在我的登台世界的方式是我有客户在443端口上查看我的网络应用程序 - https,但底层结构正在侦听80端口 - http。因此,当我的应用程序在端口80上相互通信时,但是当客户端访问该站点时,其端口443.例如,我从Silverlight调用的svc将在端口80上。
我还应该指出,在我的登台和测试域中:我有一个Web服务器充当我的应用服务器的门户;但这并不重要,因为我能够将其用于测试。只是暂存将HTTP转发到HTTPS。
应用
我有一个silverlight xap文件,该文件与使用IIS 6的托管Web应用程序位于同一个域中。
既然我的silverlight xap文件和我的web应用程序在同一个域上,我在开发和测试时运行它没有任何问题,但是当我尝试部署到分段时,我遇到了一个奇怪的跨域引用问题:< / p>
“System.ServiceModel.CommunicationException:尝试向URI发出请求时发生错误。这可能是由于尝试以跨域方式访问服务而没有适当的跨域策略,或者不适合Soap服务的政策。“
四处搜索,我发现我的应用程序认为我的xap(或我正在调用的服务)和我的Web应用程序位于不同的域上,并自动查找crossdomain.xml和clientaccesspolicy.xml文件,我可以真的要阻止它。但是,在我的申请中,情况并非如此。它们都位于同一个域中。我使用过fiddler,我没有看到任何关于其他域名甚至是子域名的事情。
浏览器问题
我发现的另一个奇怪的事情是chrome vs ie的问题: 在chrome上,它找到了crossdomain.xml和clientaccesspolicy.xml,告诉我它不安全,然后它从https端进行另一次提取,发出404错误信号。但是,在IE上我得到了302重定向。在microsoft关于clientaccesspolicy.xml的doc上,你不应该从xml文件中做任何重定向;这在这里提到:http://msdn.microsoft.com/en-us/library/cc838250(v=vs.95).aspx
所以我的问题是,如果我的app和xap在同一个域中,为什么那些xmls试图获取?是因为我使用DNS而不是IP地址?我也偶然发现了这个网站:http://msdn.microsoft.com/en-us/library/ff921170(v=pandp.20).aspx
它指出:为避免跨域调用问题,远程模块的XAP文件应与主应用程序位于同一域中;当像这样部署时,ModuleCatalog上的Ref属性应该是相对于Web服务器上主XAP文件位置的统一资源标识符(URI)。
这甚至意味着什么?
修改
好的,所以我将服务更改为指向https而不是http。但是出现了新的错误:提供的URI方案“https”无效;预期的http。
好消息是,它甚至不检查crossdomain.xml或clientaccesspolicy.xml;所以它现在意识到它在同一个域上。但现在它期望在端口80上提供服务,但名称必须遵循https://才能使其正常工作。
我认为我现在唯一的解决方案是将其作为虚拟目录,将其作为自己网站的根节点,并将整个事情视为443.让自己免于难过。
答案 0 :(得分:1)
听起来您正在一个负载平衡器卸载SSL流量的环境中工作。在这种情况下,需要为HTTPS配置客户端(Silverlight),并且必须为HTTP配置服务器。这是因为双方之间的设备正在解密SSL数据。
在这种情况下,除了正常的客户端和服务器端配置外,您的服务器端代码需要对请求的地址更加宽容。
您可能还需要在服务实现中添加一个属性,以允许您的客户端通过HTTPS进行调用,但让您的服务在HTTP上进行侦听。
将此添加到您的服务中:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
这样,您的客户就可以拨打https://my.domain.com/service.svc并让您的服务器位于http://my.domain.com/service.svc。
以下是一些可能有用的链接:
http://www.i-m-code.com/blog/blog/2011/11/30/hosting-silverlight-over-http-under-f5-big-ip/
http://www.i-m-code.com/blog/blog/2011/08/18/hosting-silverlight-under-https/