如何使用Mono.ZeroConf注册服务?

我正在尝试在http://www.mono-project.com/Mono.Zeroconf上测试ZeroConf示例。

我正在运行OpenSuse 11和Mono 2.2。

我的服务器代码是:

using System; using Mono.Zeroconf; namespace zeroconftestserver { class MainClass { public static void Main(string[] args) { RegisterService service = new RegisterService (); service.Name = "test server"; service.RegType = "_daap._tcp"; service.ReplyDomain = "local."; service.Port = 6060; // TxtRecords are optional TxtRecord txt_record = new TxtRecord (); txt_record.Add ("Password", "false"); service.TxtRecord = txt_record; service.Register(); Console.WriteLine("Service registered!"); Console.ReadLine(); } } } 

但我无法使用示例客户端浏览器代码或mzclient找到我的注册服务。

谢谢!

我还尝试使用Mono.Zeroconf项目页面提供的二进制文件,并从源代码构建lib以便在Windows上使用,并且无法发布其他客户端可以找到的服务。 我尝试了网站上的示例代码和提供的MZClient。

经过一番挖掘后,我找到了一个用于Mono.Zeroconf库的项目。 通过使用在Google代码中检查到Growl for Windows项目的二进制文件(看起来是最新版本0.9.0),我能够成功发布包含示例代码和MZClient的可查找服务。

因此,明显的工作是从该项目中获取二进制文件(Mono.Zeroconf和Mono.Zeroconf.Providers.Bonjour)并使用它们而不是项目提供的那些。

mono-project.com/Mono.Zeroconf上的二进制文件已过期,但仍包含导致此问题的代码。 最新的代码(包含所有修复程序)都在此链接,但需要您自己编译代码。

我也无法获得发布的服务。 我查看了代码,Service.cs中有一个错误,UPort setter:

 this.port = (ushort) IPAddress.HostToNetworkOrder((int) value); //overflow, port is always 0 

它应该是

 this.port = (ushort) IPAddress.HostToNetworkOrder((short) value); 

从以下链接更新源后重新编译解决了该问题

https://github.com/mono/Mono.Zeroconf/tree/master/src

他正在使用mzclient来测试他上面的Mono.Zeroconf代码。 Mono.Zeroconf的重点是提供跨平台,多个mDNS提供商支持(Avahi和Bonjour)。

EntryGroup DBus Avahi API似乎存在问题,我正在使用Mono.Zeroconf进行调查。 我将在这里发布一个解决方案,并在我找出问题时制作一个新的Mono.Zeroconf版本(我是该项目的维护者)。