4

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<T>()
{
  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;
 }

HostをSystem.Environment.MachineNameに設定するだけでよいですか?

4

2 に答える 2

8

さらに検索を行った後、System.Environment.MachineNameを使用する以外の解決策は見つかりませんでした

 new EndpointAddress(new UriBuilder {Scheme = Uri.UriSchemeNetTcp, Port = port, Host = System.Environment.MachineName}.Uri);
于 2010-03-25T09:33:57.287 に答える
8

I spent a lot of time investigating this problem. Building base addresses in the code was not acceptable for me, as it implies hardcoding transport scheme and port (the latter, of course, can be stored in a separate config section, but then why not just to use the existing section?). I wanted to have an ability to just configure the base address in config as usual. And it turns out that a base address like <add baseAddress="net.tcp://*:8731/"/> will perfectly work. I think the same is true for programmatic configuration.

于 2010-12-20T11:37:39.217 に答える