用于 net.tcp 绑定的 WCF url 重写

Posted

技术标签:

【中文标题】用于 net.tcp 绑定的 WCF url 重写【英文标题】:WCF url rewriting for net.tcp binding 【发布时间】:2016-05-07 01:26:18 【问题描述】:

我正在尝试为使用 net.tcp 绑定的 WFC 服务重写 URL(使用 IIS)。我有 WFC 服务,它托管在第一台机器上,一切正常 - 我可以毫无问题地使用它。 现在我有第二个 IIS 主机,我在其中创建了只包含 web.config 的应用程序(它应该将它的地址重写为第一台机器的 WCF),它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="service/(.*)" />
                    <action type="Rewrite" url="net.tcp://192.168.1.60/service/R:1" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

应该重写的输入 URL 是这样的:

net.tcp//localhost/service/SampleService.svc

当我检查重写日志时,一切看起来都很好,但是当我使用此应用程序的地址进行连接时(应该将 url 重写为 WFC),我只收到没有 WCF 端点的错误。我尝试了许多 URL 重写规则的组合,但都是徒劳的。两个 ISS 应用程序都启用了协议:http、net.tcp、net.pipe,ARR 也启用了代理。

我没有找到任何关于重定向 net.tcp WCF 的线程,但是我从 URL Rewriting WCF services 得到了一些提示,但这都是关于 http 绑定的。 我不确定是否可以使用 IIS 重写我的服务 url,所以如果有任何其他方法,我期待任何建议。

【问题讨论】:

我认为这不适用于交叉绑定。你可以再拥有一个带有 http 绑定的端点……你为什么要重写 url? 我需要重写它以隐藏 WCF 服务的真实地址,我也不能在第二台机器上托管它们,因为它的性能太低(如果性能不重要,我会使用 http,但是就我而言,连接效率至关重要) 【参考方案1】:

我认为这是不可能的...你必须在同一个站点和同一个应用程序池中重写 URL。

http://blogs.msdn.com/b/asiatech/archive/2011/08/25/return-404-4-not-found-when-url-rewrite.aspx

【讨论】:

在该网站的底部您可以看到解决方案,这就是为什么我确实写了 ARR 已经启用代理 啊,我没看到 那么我认为问题出在 URL...如果您在您提到的链接中观察到,URL 是相对的而不是绝对的 应该路由到哪个服务器请求应该由 ARR 处理 所以由于我的 WCF 路径是://192.168.1.60/service/ 并且第二个应用程序的 web.config 位于://192.168.1.101/service/ 那么规则应该是什么样子?跨度>

以上是关于用于 net.tcp 绑定的 WCF url 重写的主要内容,如果未能解决你的问题,请参考以下文章

我可以为 protobuf-net WCF 使用 net.tcp 绑定吗?

WCF net.tcp 绑定:托管多个服务是不是需要端口共享?

WCF 错误“找不到与具有绑定 NetTcpBinding 的端点的方案 net.tcp 匹配的基地址”

wcf中实用net.tcp绑定,在本机可以连接,但是其他机器上就不可以?

wsFederationHttpBinding over net.tcp

更改 WCF 服务的绑定?