2011-01-02 4 views
3

J'ai écrit une application compatible mono qui fonctionne bien sur une machine Windows et travaille principalement sur mon mac. La zone qui ne fonctionne pas actuellement est la couche qui utilise WCF (ChannelFactory) pour communiquer entre le serveur et le client.Mono WCF problème sur OSX

La question semble être quand je tente d'ouvrir le ChannelFactory sur le serveur, voici un extrait de code:

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(); 

Le problème est dû à l'appel .Open() - il semble juste accrocher mon mac. Créer le point de terminaison prend beaucoup plus de temps à créer que sur mon PC (environ 3-4 secondes) mais je peux vivre avec cela si je peux faire fonctionner la couche WCF.

Quelqu'un at-il des suggestions sur la façon de progresser dans ce problème?

+0

Quelle version de Mono? – TheNextman

+0

mono --version renvoie 2.6.7 sur mon mac. Au moment de l'écriture, il s'agit de la version stable la plus récente. – Mattl

+0

Juste une note pour quiconque lit ceci. J'ai corrigé le problème avec la dernière version et un refactor rapide du code. – Mattl

Répondre

2

La version stable la plus récente de Mono est 2.8.2 (http://www.go-mono.com/mono-downloads/download.html)

Vous avez vraiment besoin d'essayer cette version avant de faire rien d'autre. La pile WCF dans 2.6.x était plus un 'aperçu' qu'autre chose, et seulement quelques scénarios communs ont fonctionné réellement. 2.8 est beaucoup plus complet.

+0

Merci pour les heads up. J'ai installé 2.8.2 sur mon mac mais malheureusement maintenant l'application se bloque en essayant de créer l'usine de canal, je ne peux plus obtenir l'appel .open. – Mattl

+0

Je suis capable d'utiliser ChannelFactory sur Mono 2.8.2 sous Linux. En général, j'utilise BasicHttpBinding mais je crois que nous avons également testé NetTcpBinding. Désolé je ne peux pas être plus d'aide en dehors de dire que ce que vous essayez * devrait * être possible. – TheNextman