当前位置:  开发笔记 > 编程语言 > 正文

WCF发现找到端点但主机是"localhost"

如何解决《WCF发现找到端点但主机是"localhost"》经验,为你挑选了2个好方法。

我试图使用http://msdn.microsoft.com/en-us/library/dd456783(v=VS.100).aspx作为起点在WCF中使用发现功能.它在我的机器上工作正常,但后来我想在另一台机器上运行该服务.该服务被正确发现,但找到的服务的主机名始终是"localhost",当然没什么用处.

服务端点:

var endpointAddress = new EndpointAddress(new UriBuilder { Scheme = Uri.UriSchemeNetTcp, Port = port}.Uri);
var endpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IServiceInterface)), new NetTcpBinding (), endpointAddress);

客户:

static EndpointAddress FindServiceAddress()
{
  Stopwatch stopwatch = new Stopwatch();
  stopwatch.Start();
  DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
  // Find  endpoints            
  FindResponse findResponse = discoveryClient.Find(new FindCriteria(typeof(T)));
  Console.WriteLine(string.Format("Searched for {0} seconds. Found {1} Endpoint(s).",stopwatch.ElapsedMilliseconds / 1000,findResponse.Endpoints.Count));
  if (findResponse.Endpoints.Count > 0)
  {
     return findResponse.Endpoints[0].Address;
  }
  return null;
 }

我应该简单地将主机设置为System.Environment.MachineName吗?



1> flayn..:

在做了一些更多的搜索之后我没有找到任何其他解决方案而不是使用System.Environment.MachineName

 new EndpointAddress(new UriBuilder {Scheme = Uri.UriSchemeNetTcp, Port = port, Host = System.Environment.MachineName}.Uri);



2> sich..:

我花了很多时间来研究这个问题.在代码中构建基地址对我来说是不可接受的,因为它意味着硬编码传输方案和端口(当然,后者可以存储在单独的配置部分中,但为什么不仅仅使用现有部分?).我希望能够像往常一样在config中配置基地址.事实证明,像这样的基地址将完美起作用.我认为程序化配置也是如此.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有