我一直在寻找整个网站和堆栈溢出,我可以解决我的问题。
网络设置
我在暂存世界中的网络方式是让客户在 443 端口 - https 上查看我的 web 应用程序,但底层结构正在侦听 80 端口 - http。因此,当我的应用程序在端口 80 上相互通信时,但当客户端访问站点时,其端口为 443。例如,我从 silverlight 调用的 svc 将在端口 80 上。
我还应该指出,在我的暂存和测试域中:我有一个 Web 服务器充当我的应用服务器的门户;但这并不重要,因为我能够进行测试。只是staging 有HTTP 转发到HTTPS。
应用
我有一个 silverlight xap 文件,它与使用 IIS 6 的托管 Web 应用程序位于同一域中。
现在,由于我的 silverlight xap 文件和我的 web 应用程序在同一个域上,我在开发和测试上运行它没有问题,但是当我尝试部署到暂存时,我遇到了一个奇怪的跨域引用问题:
“System.ServiceModel.CommunicationException:尝试向 URI 发出请求时发生错误。这可能是由于尝试以跨域方式访问服务而没有适当的跨域策略,或者是不适合肥皂服务。”
四处挖掘,我意识到我的应用程序认为我的 xap(或我正在调用的服务)和我的 Web 应用程序位于不同的域上,并自动查找 crossdomain.xml 和 clientaccesspolicy.xml 文件,我真的不能停下来。但是,在我的应用程序中,情况并非如此。它们都驻留在同一个域中。我使用过 fiddler,但我没有看到任何关于另一个域甚至子域的信息。
浏览器问题
我发现的另一个奇怪的事情是 chrome vs ie 的问题:在 chrome 上,它发现 crossdomain.xml 和 clientaccesspolicy.xml 告诉我它不安全,然后它从 https 端进行另一次提取,发出 404 错误信号。但是,在 IE 上,我得到了 302 重定向。在微软关于 clientaccesspolicy.xml 的文档中,您不应该从 xml 文件进行任何重定向;这在这里提到:http: //msdn.microsoft.com/en-us/library/cc838250 (v=vs.95).aspx
所以我的问题是,如果我的应用程序和 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。免去我的头疼。