C# HTTP到HTTPS silverlight wcf跨域问题

C# HTTP到HTTPS silverlight wcf跨域问题,c#,asp.net,wcf,silverlight,cross-domain,C#,Asp.net,Wcf,Silverlight,Cross Domain,我一直在寻找整个网站和堆栈溢出,我只是可以解决我的问题 网络设置 我的网络在我的登台世界中的方式是,我的客户端在443端口https上查看我的web应用程序,但底层结构在80端口http上侦听。因此,当我的应用程序在其端口80上相互通信时,但当客户端访问该站点时,其端口为443。例如,从silverlight调用的svc将位于端口80上 我还应该指出,在我的登台和测试域上:我有一个web服务器作为我的应用服务器的入口;但这并不重要,因为我可以在测试中使用它。只是登台将HTTP转发到HTTPS 应

我一直在寻找整个网站和堆栈溢出,我只是可以解决我的问题

网络设置

我的网络在我的登台世界中的方式是,我的客户端在443端口https上查看我的web应用程序,但底层结构在80端口http上侦听。因此,当我的应用程序在其端口80上相互通信时,但当客户端访问该站点时,其端口为443。例如,从silverlight调用的svc将位于端口80上

我还应该指出,在我的登台和测试域上:我有一个web服务器作为我的应用服务器的入口;但这并不重要,因为我可以在测试中使用它。只是登台将HTTP转发到HTTPS

应用程序

我有一个silverlight xap文件,它与使用IIS 6的托管web应用程序位于同一个域中

现在,由于我的silverlight xap文件和我的web应用程序位于同一个域中,因此在开发和测试中运行该文件没有问题,但是当我尝试部署到登台时,我遇到了一个奇怪的跨域引用问题:

System.ServiceModel.CommunicationException:尝试向URI发出请求时出错。这可能是由于在没有适当的跨域策略的情况下尝试以跨域方式访问服务,或者是因为策略不适合Soap服务

翻来覆去,我意识到我的应用程序认为我的xap(或我正在调用的服务)和我的web应用程序位于不同的域上,并自动查找crossdomain.xml和clientaccesspolicy.xml文件,我真的无法阻止它。然而,在我的申请中,情况并非如此。它们都位于同一个域中。我使用了fiddler,但我没有看到关于其他域或子域的任何内容

浏览器问题

我发现的另一件奇怪的事情是chrome和ie的问题: 在chrome上,它发现crossdomain.xml和clientaccesspolicy.xml告诉我它不安全,然后它从https端进行另一次获取,发出404错误信号。然而,在IE上,我得到了302重定向。在microsoft关于clientaccesspolicy.xml的文档中,您不应该从xml文件执行任何重定向;这里提到:

所以我的问题是,如果我的应用程序和xap在同一个域上,为什么这些XML试图获取数据?是因为我使用的是DNS而不是IP地址吗?我还偶然发现了这个网站:

它指出:为了避免跨域调用问题,远程模块的XAP文件应该与主应用程序位于同一个域上;这样部署时,ModuleCatalog上的Ref属性应该是相对于Web服务器上主XAP文件位置的统一资源标识符(URI)

这到底是什么意思

编辑

好的,我将服务改为指向https而不是http。但是出现了新的错误:提供的URI方案“https”无效;应为http

好的是,它甚至不检查crossdomain.xml或clientaccesspolicy.xml;所以它现在意识到它在同一个域上。但现在它希望在端口80上有一个服务,但名称必须跟在https://后面才能工作


我认为我现在唯一的解决方案是把它作为一个虚拟目录,使它成为自己网站的根节点,并使整个事情成为443。省省我自己的头疼吧。

听起来您的工作环境是一个负载平衡器卸载SSL流量的环境。在这种情况下,您的客户端(Silverlight)需要配置为HTTPS,而您的服务器必须配置为HTTP。这是因为双方之间的设备正在解密SSL数据

在这种情况下,除了正常的客户端和服务器端配置之外,服务器端代码需要对请求的地址更宽容一些

您可能还需要向服务实现添加一个属性,以允许您的客户端通过HTTPS进行调用,但让您的服务监听HTTP

将此添加到您的服务中:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
这允许您的客户机呼叫并让您的服务器在线

以下是一些可能也会有所帮助的链接:


我不确定您的设置是什么,但请注意,“相同来源”意味着url的所有3个部分必须匹配:架构(http和https不同)、域(需要精确匹配,不区分大小写)和端口(精确匹配)。如果我将其设置为相同来源,则会出现新错误:System.ArgumentException:提供的URI方案“https”无效;预期的“http”应该有数十篇文章介绍如何配置WCF以在HTTPS端点上工作……如果您有混合环境,则不是这样,我的端点在端口80上,但它们被视为端口443。但你的指导确实帮我弄明白了一些事情。