繁体   English   中英

在不同服务器上使用什么作为WCF net.tcp主机baseAddress?

[英]What to use as WCF net.tcp host baseAddress on different servers?

在我的App.config中,我指定了这个基地址(“jerrycan”是我的计算机的名称):

<service behaviorConfiguration="helloWorldServiceBehavior" name="OpdService.OpdService">
    <endpoint address="/service" binding="netTcpBinding" bindingConfiguration="NewBinding0"
      name="MainEndPoint" contract="OpdService.IOpdService">
      <identity>
        <dns value="jerrycan" />
      </identity>
    </endpoint>
    <endpoint kind="udpDiscoveryEndpoint" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://jerrycan:8000" />
        <add baseAddress="http://jerrycan/service" />
      </baseAddresses>
      <timeouts openTimeout="00:00:15" />
    </host>
  </service>

一切正常,直到我在其他计算机上运行服务 - 客户端可以通过UDP发现找到服务,但无法连接,因为服务继续发送旧地址。 当我将“jerrycan”更改为“localhost”时,只有本地客户端能够连接到服务(但在任何计算机上)。 其他计算机上的任何客户端都尝试连接到“localhost”但没有成功。

那么,如果我希望能够在不重新编译的情况下在不同的计算机上运行服务,我应该将其用作主机地址? 我应该在每个计算机的配置文件中的某处存储地址,还是应该在运行时更改地址? 我想,我在这里缺少一些简单而基本的东西。

或者也许我应该使用localhost(如许多wcf示例中),这是我的客户端连接代码带来的问题:

EndpointAddress endpointAddress = findResponse.Endpoints[0].Address;
OpdChannelFactory = new DuplexChannelFactory<OpdServiceReference.IOpdService>(CallbackHandler,
                        new NetTcpBinding("MainEndPoint"), endpointAddress);

同样,当我使用“localhost”作为基地址时,“localhost”作为findResponse端点地址。

编辑:

好像我在这里找到了解决方案http//btw-blog.blogspot.com/2011/02/dynamic-base-address-for-wcf-service.html

关键是用*符号(通配符)替换基址中的主机名。 它将在运行时使用实际主机名进行更改。

尚未测试过所有内容,但看起来确实有效。

好像我在这里找到了解决方案: http//btw-blog.blogspot.com/2011/02/dynamic-base-address-for-wcf-service.html

重点是用“*”符号(通配符)替换基址中的主机名。 它将在运行时使用实际主机名进行更改。

经过测试,效果很好。

现在您的服务端点地址是:

net.tcp://jerrycan:8000/service

当您在托管服务的计算机(jerrycan-pc)上创建客户端时,本地客户端将能够通过引用访问该服务

net.tcp://localhost:8000/service

显然其他客户端(在网络上的其他计算机上)如果尝试联系localhost 则无法连接到该服务,因为端点: net.tcp://localhost:8000/service正在调用本地计算机,在这种情况下没有托管服务(仅适用于jerrycan-pc)。 如果jerrycan-pc托管该服务, jerrycan-pc上的客户端可以通过引用localhost来调用该服务,但是mike-pc上的客户端必须尝试调用jerrycan-pcjerrycan-pc的IP。 如果将服务配置中的端点更改为服务主机IP甚至计算机名称,并使用服务主机/计算机名称的IP引用其他计算机上的服务,则他们将能够访问它。 例如,如果jerrycan-pc托管该服务并且其IP为192.168.1.5 ,则您的客户端可以通过引用此端点来使用该服务:

net.tcp://192.168.1.5:8000/service

因此,在您的服务配置中,将localhost更改为IP地址或PC名称,并尝试联系客户端上的该地址,而不是联系localhost

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM