Моно WCF NetTcp сервис принимает только один клиент за один раз - PullRequest
6 голосов
/ 31 мая 2010

При попытке создать клиент-серверное приложение WCF в Mono мы столкнулись с некоторыми проблемами. Сокращая это до простого примера, мы обнаружили, что служба принимает только одного клиента за раз. Если другой клиент пытается подключиться, он зависает, пока не отключится первый.

Простое изменение на BasicHttpBinding исправляет это, но нам необходим NetTcpBinding для дуплексной связи. Также проблема не появляется, если скомпилирована под MS .NET.

РЕДАКТИРОВАТЬ: Я сомневаюсь (и надеюсь, что нет), что Mono не поддерживает то, что я пытаюсь сделать. Насколько я заметил, моно-код обычно генерирует исключения NotImplementedException в таких случаях. Я использую Mono v2.6.4

Вот как сервис открывается в нашем базовом сценарии:

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

}

Клиентский канал получается так:

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

Насколько я знаю, это симплексное соединение, не так ли?

Контракт просто:

[ServiceContract]
public interface IHello
{

    [OperationContract]
    string Greet (string name);
}

Реализация сервиса не имеет тегов или атрибутов ServiceModel.

Я буду обновлять детали по мере необходимости.

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

Я немного поиграл с этим, и это определенно похоже на моно-ошибку.

Я портирую приложение WCF для запуска в Mono. Я играл с некоторыми вещами NetTcpBinding, но я не пробовал этот сценарий (несколько подключений к хосту службы Mono-hosted). Однако теперь я попробую, я могу воспроизвести - как в версии 2.6, так и в последнем ежедневном пакете.

Это работает в .NET, однако. Любая разница в поведении между Mono и .NET классифицируется как ошибка. Вы должны зарегистрировать его на Bugzilla с помощью тестового примера, я также разместил бы его в новостном листе Mono.

Удачи.

1 голос
/ 02 июня 2010

Определенно ошибка. Мне интересно, была ли версия, она работала правильно ...

Я разместил его на Novell Bugzilla , если вы заинтересованы в его прогрессе.

...