2011-01-02 15 views
3

Ich habe eine mono-kompatible Anwendung geschrieben, die auf einem Windows-Rechner funktioniert und meistens auf meinem Mac funktioniert. Der Bereich, der derzeit nicht funktioniert, ist der Layer, der WCF (ChannelFactory) für die Kommunikation zwischen Server und Client verwendet.Mono WCF Ausgabe auf OSX

Das Problem zu sein scheint, wenn ich versuche, und öffnen Sie den Channel auf dem Server, hier ist ein Code-Schnipsel:

string address = "21"; // added this for simplicity in conveying the problem... 
string server_address = "net.tcp://192.168.1.122:4505/DeviceServer/"; 
string serviceAddress = string.Format(server_address, address); 

ThreadedServiceHost<DeviceService, IDeviceContract> DeviceHost = 
      new ThreadedServiceHost<DeviceService, IDeviceContract>(serviceAddress, address, new NetTcpBinding()); 

EndpointAddress endPoint = new EndpointAddress(
        new Uri(string.Format(serviceaddress, address) + address)); 

System.ServiceModel.Channels.Binding binding = new NetTcpBinding(); 

teeGlobal.ServerDeviceFactory = new ChannelFactory<IDeviceChannel>(binding, endPoint); 
teeGlobal.ServerDeviceFactory.Open(); 

Das Problem mit dem .Open() -Aufruf ist - es scheint nur zu hängen mein Mac. Das Erstellen des Endpunkts dauert viel länger als auf meinem PC (etwa 3-4 Sekunden), aber ich kann damit leben, wenn ich die WCF-Schicht funktionieren lassen kann.

Hat jemand Vorschläge, wie Sie mit diesem Problem fortfahren können?

+0

Welche Version von Mono? – TheNextman

+0

mono - version gibt 2.6.7 auf meinem mac zurück. Zum Zeitpunkt des Schreibens ist dies die letzte stabile Veröffentlichung. – Mattl

+0

Nur eine Anmerkung für jeden, der dies liest. Ich habe das Problem mit der neuesten Version und einem schnellen Refactor des Codes behoben. – Mattl

Antwort

2

Die letzte stabile Version von Mono ist 2.8.2 (http://www.go-mono.com/mono-downloads/download.html)

Sie wirklich mit dieser Version müssen versuchen, bevor Sie noch etwas. Der WCF-Stack in 2.6.x war mehr eine "Vorschau" als alles andere, und nur einige übliche Szenarien funktionierten tatsächlich. 2.8 ist viel vollständiger.

+0

Danke für die Köpfe hoch. Ich habe 2.8.2 auf meinem Mac installiert, aber leider hängt jetzt die Anwendung beim Versuch, die Kanalfactory zu erstellen, ich kann nicht mehr zum .open-Aufruf gelangen. – Mattl

+0

Ich kann die ChannelFactory auf Mono 2.8.2 unter Linux verwenden. Im Allgemeinen benutze ich BasicHttpBinding, aber ich glaube, dass wir auch NetTcpBinding getestet haben. Entschuldigung, ich kann nicht mehr Hilfe sein außer zu sagen, dass das, was du versuchst, * möglich sein sollte *. – TheNextman