【发布时间】:2013-09-30 02:29:05
【问题描述】:
我一直在寻找整个网站和堆栈溢出问题,我可以解决我的问题。
网络设置
我在暂存世界中的网络方式是让客户在 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 发出请求时发生错误。这可能是由于尝试以跨域方式访问服务而没有适当的跨域策略,或者不适合 Soap 服务的策略。”
四处挖掘,我意识到我的应用程序认为我的 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。免去我的头疼。
【问题讨论】:
-
我不确定您的设置是什么,但请注意“同源”意味着 url 的所有 3 个部分必须匹配:架构(http 和 https 不同)、域(需要完全匹配,不区分大小写)和端口(完全匹配)。
-
如果我将其设为相同的来源,我会收到一个新错误:System.ArgumentException:提供的 URI 方案“https”无效;预期为“http”
-
应该有几十篇文章如何配置WCF在HTTPS端点上工作...
-
如果你有一个混合环境,我的端点在端口 80 上,但它们被视为端口 443。但你的方向确实帮助我解决了一些问题。
标签: c# asp.net wcf silverlight cross-domain