我需要修改WCF端点绑定地址。以下是该问题的一些背景知识:
我有一个NT类服务(如果重要,不是web服务)。它创建一个带有端点的System.ServiceModel.ServiceHost
,其端点地址以这种方式创建:
var epa = new EndpointAddress(string.Format("https://localhost:{0}/ServiceAPI/", 8181));
用于ServiceEndpoint
的绑定是WebHttpBinding
Mode=WebHttpSecurityMode.Transport
(即https)。
当ServiceHost打开时,我可以进入命令提示符,然后执行“Netstat -a”并查看绑定到Listen的地址为0.0.0.0:8181。
到目前为止,没问题。但是,一个大客户提出了一个“安全问题”,因为WCF“listen”位于地址0.0.0.0而不是127.0.0.1,潜在的攻击者可以从外部计算机连接到该地址。他们构建的测试是从外部机器使用telnet 8181,如果发生连接,则测试失败。更改请求是在127.0.0.1:8181上将服务修改为“listen”,以便连接到该端口的唯一可能性来自本地计算机。我已经做了相当多的修改,试图让WCF“监听”“127.0.0.1”而不是“0.0.0.0”。在我的所有尝试中,唯一的方法是将HostNameComparisonMode
设置为“Exact”并以这种方式创建端点地址:
var epa = new EndpointAddress(string.Format("https://127.0.0.1:{0}/ServiceAPI/", 8181));
(实际上,另外,如果我使用NetTcpBinding
等不同的绑定,上面的EndPointAddress
构造将绑定到地址“127.0.0.1:8181”不改变HostNameComparisonMode。当我使用WebHttpBinding时它只在内部切换到“0.0.0.0:8181”,并且无法设置HostNameComparisonMode = Exact。)
但是,这(设置HostNameComparisonMode = Exact)会导致复杂性中断,因为现有的第三方代码已经开发,尝试(板载服务器)连接到“https://localhost:8181/ServiceAPI”,以及HostNameComparisonMode设置为“Exact”,由于“localhost”和“127.0.0.1”之间的差异,WCF只会将http错误506返回给任何请求。
我目前正在寻找的是将WCF设置为绑定到“127.0.0.1:8181”(由netstat -a确定)并且HostNameComparisonMode仍设置为默认“StrongWildcard”设置的方法。或者除非有任何方法可以做到这一点,另一个创造性的建议是导致来自外部机器的连接无法连接到该端口。 (测试将使用来自不同机器的“telnet servername 8181”,并且无法连接。)
有什么想法吗?谢谢!
答案 0 :(得分:0)
如果我理解你,你想从远程机器连接到这个地址,你可以尝试 BasicHttpBinding 吗?您也可以尝试将其托管在:“https://localhost:{0} / ServiceAPI /”,8181“如果我理解你错了,请更正。