在我的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>
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我在其他计算机上运行服务 - 客户端可以通过UDP发现找到服务,但无法连接,因为服务继续发送旧地址.当我将"jerrycan"更改为"localhost"时,只有本地客户端能够连接到服务(但在任何计算机上).其他计算机上的任何客户端都尝试连接到"localhost"但没有成功.
那么,如果我希望能够在不重新编译的情况下在不同的计算机上运行服务,我应该将其用作主机地址?我应该在每个计算机的配置文件中的某处存储地址,还是应该在运行时更改地址?我想,我在这里缺少一些简单而基本的东西.
或者也许我应该使用localhost(如许多wcf示例中),这是我的客户端连接代码带来的问题:
EndpointAddress endpointAddress = findResponse.Endpoints[0].Address;
OpdChannelFactory = new DuplexChannelFactory<OpdServiceReference.IOpdService>(CallbackHandler,
new NetTcpBinding("MainEndPoint"), endpointAddress);
Run Code Online (Sandbox Code Playgroud)
同样,当我使用"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
重点是用"*"符号(通配符)替换基址中的主机名.它将在运行时使用实际主机名进行更改.
经过测试,效果很好.
| 归档时间: |
|
| 查看次数: |
6681 次 |
| 最近记录: |