我正在尝试使用Mono.ZeroConf进行服务发现。我可以正常发现服务,但每个服务的端口总是设置为0,而不是实际值。
我使用的是.NET 4
和ZeroConf 0.9.0
,这是我的代码:
public MainWindow()
{
serviceBrowser = new ServiceBrowser();
serviceBrowser.ServiceAdded += ServiceAdded;
serviceBrowser.Browse(0, AddressProtocol.Any, "_http._tcp.", "local");
}
private void ServiceAdded(object o, ServiceBrowseEventArgs args)
{
Console.WriteLine("*** Found name = '{0}', type = '{1}', domain = '{2}'",
args.Service.Name,
args.Service.RegType,
args.Service.ReplyDomain);
args.Service.Resolved += ServiceResolver;
if (args.Service.Name.Equals("MyService") &&
args.Service.RegType.Equals("_http._tcp."))
{
args.Service.Resolve();
}
}
private void ServiceResolver(object o, ServiceResolvedEventArgs args)
{
IResolvableService service = o as IResolvableService;
Console.Write("*** Resolved name = '{0}', host ip = '{1}', hostname = {2},
port = '{3}', " + "interface = '{4}', address type = '{5}'",
service.FullName, service.HostEntry.AddressList[0],
service.HostEntry.HostName, service.Port,
service.NetworkInterface, service.AddressProtocol);
}
当我使用MZClient 0.8.0来发现服务时,所有端口值都和预期的一样,但当我使用0.9.0时,同样的事情也会发生。
如何获得正确的端口值?是由于0.9.0版本中的一些错误,还是其他原因?
这是由于Mono.Zeroconf中的一个错误引起的,该错误在这个pull请求中得到了修复。
您需要自己构建库,直到pull请求被接受并且Nuget包再次发布。