2010-05-31 15 views
6

Mono'da bir istemci-sunucu WCF uygulaması oluşturmaya çalışırken bazı sorunlara rastladık. Sadece çıplak bir örneğe indirgeyerek, hizmetin aynı anda yalnızca bir istemci kabul ettiğini gördük. Başka bir istemci bağlanmaya çalışırsa, ilki kesilene kadar askıda kalır.Mono WCF NetTcp hizmeti bir seferde yalnızca bir istemci alır

Basitçe BasicHttpBinding ile değiştirdiğinizde, ancak çift yönlü iletişim için NetTcpBinding'a ihtiyacımız var. Ayrıca, MS .NET altında derlenmiş ise sorun görünmüyor.

DÜZENLEME: Mono'nun yapmaya çalıştığım şeyi desteklemediğinden şüpheliyim (ve umarım). Mono kodu genellikle fark ettiğim kadarıyla NotImplementedExceptions atar. Ben Mono v2.6.4 kullanıyorum

Bu hizmet bizim temel senaryoda açıldığında nasıl: Bildiğim kadarıyla olarak

var binding = new NetTcpBinding(); 
binding.Security.Mode = SecurityMode.None; 
var address = new EndpointAddress ("net.tcp://localhost:8080/"); 
var client = new ChannelFactory<IHello> (binding, address).CreateChannel(); 

:

public static void Main (string[] args) 
{ 
    var binding = new NetTcpBinding(); 
    binding.Security.Mode = SecurityMode.None; 
    var address = new Uri ("net.tcp://localhost:8080"); 
    var host = new ServiceHost (typeof(Hello)); 
    host.AddServiceEndpoint (typeof(IHello), binding, address); 

    ServiceThrottlingBehavior behavior = new ServiceThrottlingBehavior() 
    { 
     MaxConcurrentCalls = 100, 
     MaxConcurrentSessions = 100, 
     MaxConcurrentInstances = 100    
    }; 
    host.Description.Behaviors.Add (behavior); 

    host.Open(); 
    Console.ReadLine(); 
    host.Close(); 

} 

istemci kanal böyle elde edilir Bu Simplex bir bağlantı, değil mi?

sözleşme basitçe:

[ServiceContract] 
public interface IHello 
{ 

    [OperationContract] 
    string Greet (string name); 
} 

Servis uygulaması hiçbir ServiceModel etiketleri veya özellikleri vardır.

Gerektiğinde ayrıntıları ile güncelleyeceğim.

+0

Hizmet neye benziyor? Nasıl bağlanıyorsun Ne alıyorum Dubleks yönü ... Ne kadar iyi (bilmiyorum) Dubleks Mono çalışır bilmiyorum. Son noktayı böyle çalıştırmayı ve basit, simpleks bir servis kullanmayı mı denediniz? – TheNextman

+0

Eninde sonunda Dubleks kullanmalıyım, ancak geri aldığımız bu basit örnek basit bir simpleks servistir. Anlayabildiğim kadarıyla doğru bir şekilde çalışmalı ve BasicHttp ile çalışacak. Soruyu diğerleriyle güncelleyeceğim. – vene

+0

Eğer onu kaçırdıysanız, bunun şimdi düzeltilebileceği anlaşılıyor. Bkz. Alexcepois hata raporu: https://bugzilla.novell.com/show_bug.cgi?id=610659 – TheNextman

cevap

3

Bu konuda biraz oynamıştım ve kesinlikle bir Mono hatası gibi görünüyor.

Şu an Mono'da çalışmak için bir WCF uygulaması taşıyorum. Bazı NetTcpBinding öğelerinde oynamıştım, ancak bu senaryoyu denemedim (Mono tarafından barındırılan bir hizmet ana bilgisayarına birden çok bağlantı). Ancak şimdi bunu denerim, çoğaltabilirim - hem 2.6'da hem de en son günlük pakette.

Ancak, .NET'te çalışır. Mono ve .NET arasındaki davranışlarda herhangi bir fark bir hata olarak sınıflandırılır. Bugzilla'ya bir test vakasıyla giriş yapmalısınız, ayrıca Mono haber listelerinde de yayınlarım.

İyi şanslar.

+0

Belki Mono'nun bazı eski versiyonlarında çalışır, böyle bir senaryoda herhangi bir iyi deneyime sahip oldu mu? – vene

+0

WCF, 2.4 ile gerçekten uğraşmaya değmezdi, daha çok önizlemeden başka bir şeydi. Bir çok senaryo 2.6'da çalışıyor, ancak birçoğu uygulanmadı ve çok şey bozuldu. 2.8'de kırılan bir çok şeyi düzelttiler, bu yüzden son güne karşı test ettiğimde oldukça umutluydum; ama zar yok.Üzerinde çalıştığım bir projede NetTcpBinding'i (duplekssiz olsa da) kullanmak istediğim için yaptığınız herhangi bir ilerlemeyi takip etmek istiyorum. – TheNextman

+0

Gerçekten de Mono NetTcpBinding şu anda bozuk görünüyor. Mono altında sadece çift yönlü bağlantının istemci tarafını kullanmak için, .NET ile Windows altında çalışan bir başsız sunucu yazmayı bile denedim. Bu da işe yaramadı. – vene

1

Kesinlikle bir hata. Bir versiyonun düzgün çalışıp çalışmadığını merak ediyorum ...

İlerlemeyle ilgileniyorsanız, Novell Bugzilla adresinden yayınladım.

İlgili konular