加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 用于流量加密的公共反向代理背后的WCF

发布时间:2020-12-16 09:51:50 所属栏目:asp.Net 来源:网络整理
导读:我有一个连接到WCF服务的Silverlight应用程序.在我习惯的基本配置下,将此应用程序连接到相应的WCF服务没有问题. 但是,最近,我的一个客户开始使用Apache反向代理.此代理是公共服务器,它仅用于通过客户端与它之间的SSL(HTTPS)加密HTTP流量.此代理将所有流量从
我有一个连接到WCF服务的Silverlight应用程序.在我习惯的基本配置下,将此应用程序连接到相应的WCF服务没有问题.

但是,最近,我的一个客户开始使用Apache反向代理.此代理是公共服务器,它仅用于通过客户端与它之间的SSL(HTTPS)加密HTTP流量.此代理将所有流量从它传递到托管我的应用程序的实际Web服务器.公共代理和IIS服务器之间的流量只是普通的HTTP.

所以流量如下:
最终用户浏览器— HTTPS —->公共反向代理—– HTTP —->承载WCF服务的IIS服务器.

反向代理和IIS位于两个单独的服务器上.

我无法使Silverlight应用程序正常运行.我不确定如何配置端点?每当我使用公共代理的地址作为我的端点地址时,我都会遇到问题.

Silverlight应用程序通常具有以下配置:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IPOTemplateEditorSrv" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="TransportWithMessageCredential" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://public-reverse-proxy-url/POTemplateEditorSrv.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPOTemplateEditorSrv"
                contract="POEditorSrvRef.IPOTemplateEditorSrv" name="BasicHttpBinding_IPOTemplateEditorSrv" />
        </client>
    </system.serviceModel>
</configuration>

请注意,我正在使用,我的端点地址指向反向代理的公共HTTPS地址.

我错过了什么吗?是否有任何其他信息来配置代理?任何可以让我的Silverlight客户端连接到服务的变通方法?

解决方法

也许这个答案有点太明显了,但它听起来像WSDL正在宣传一个内部主机名作为WCF地址 – 当该地址不是真正的公共地址时.
因为IIS正在生成WSDL,所以它只是在端点地址中使用它的主机名 – 这不是你想要的,你想要代理的地址.

尝试创建WSDL文件的静态副本,并将其发布到Web服务器上.确保使用公共代理主机名将所有REFERENCES替换为内部主机名.
然后修改您的WCF客户端配置以指向静态WSDL.
你可以在这里找到一个简短的解释:Supply a different endpoint address in the WSDL of a WCF web service

如果这不起作用 – 尝试使用嗅探器(wireshark)捕获来回发送的内容 – 禁用HTTPS可能是您需要从等式中删除的部分.
您的Web服务请求似乎是SENT到代理,但代理无法正确处理请求 – 尝试我们的嗅探工具的完美方案.

当您使用Web浏览器向SVC发出直接请求时,请求将如下所示

GET /POTemplateEditorSrv.svc HTTP/1.1
Host: public-reverse-proxy-url

但是当通过Silverlight发送时,它可能看起来像这样

GET /POTemplateEditorSrv.svc HTTP/1.1
Host: private-server-address

这可能是一个微妙的差异,以扰乱代理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读