I spent some time last night hacking up some Avahi bindings for C#, using the DBus API. The wrapper is here, and a little test app is here. The test app registers a ‘foobar’ service, and then lists all services in the default (I think?) domain. Obligatory ‘screenshot’ below. Unfortunately, I ran into some dbus-sharp bugs while doing this. You’ll need this patch to dbus-sharp in order to use it. You can also grab a dll here.
snorp@sackbut misc/avahi/avahi-sharp % mono test.exe
Service 'Living Room' at DVR-8477.local:80
Txt: TSN=54000000000000
Resolved DVR-8477.local to 192.168.1.105
Reverse resolved 192.168.1.105 to DVR-8477.local
Service 'Now Playing on Living Room' at DVR-8477.local:443
Txt: TSN=54000000000000
Resolved DVR-8477.local to 192.168.1.105
Reverse resolved 192.168.1.105 to DVR-8477.local
Service 'Now Playing on Living Room' at DVR-8477.local:443
Txt: TSN=54000000000000
Resolved DVR-8477.local to 192.168.1.105
Reverse resolved 192.168.1.105 to DVR-8477.local
Service 'iTunes_Ctrl_60AA03D0FEE58A7F' at homer.local:3689
Txt: DbId=10000
Resolved homer.local to 192.168.1.103
Reverse resolved 192.168.1.103 to homer.local
Service 'snorp’s Music' at homer.local:3689
Txt: Password=false
Resolved homer.local to 192.168.1.103
Reverse resolved 192.168.1.103 to homer.local
Service 'Remote Terminal on sackbut' at sackbut.local:22
Resolved sackbut.local to 192.168.1.101
Reverse resolved 192.168.1.101 to sackbut.local
Service 'sackbut [00:0d:60:36:95:4d]' at sackbut.local:9
Resolved sackbut.local to 192.168.1.101
Reverse resolved 192.168.1.101 to sackbut.local
Service 'foobar' at sackbut.local:8080
Txt:
Resolved sackbut.local to 192.168.1.101
Reverse resolved 192.168.1.101 to sackbut.local