Служба Mono WCF NetTcp одновременно принимает только одного клиента

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

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

EDIT: я сомневаюсь (и надеюсь, что нет), что Mono не поддерживает то, что я пытаюсь сделать. Насколько я заметил, монокод обычно выдает NotImplementedExceptions в таких случаях. Я использую Моно 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.

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


person vene    schedule 31.05.2010    source источник
comment
Как выглядит сервис? Как вы подключаетесь? Я имею в виду аспект Duplex... Я не знаю, насколько хорошо (если вообще) Duplex работает в Mono. Вы пытались запустить конечную точку таким образом и просто использовать простой простой сервис?   -  person TheNextman    schedule 31.05.2010
comment
В конечном итоге мне нужно будет использовать Duplex, но этот базовый пример, к которому мы вернулись, представляет собой простую симплексную службу. Насколько я могу судить, он должен работать правильно, и он ДЕЙСТВИТЕЛЬНО работает с BasicHttp. Я обновлю вопрос с остальными.   -  person vene    schedule 31.05.2010
comment
Если вы пропустили это, похоже, это может быть исправлено сейчас. См. отчет об ошибке alexcepois: bugzilla.novell.com/show_bug.cgi?id=610659   -  person TheNextman    schedule 15.06.2010


Ответы (2)


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

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

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

Удачи.

person TheNextman    schedule 31.05.2010
comment
Может быть, в какой-то старой версии Mono это работает, у кого-нибудь был хороший опыт с таким сценарием? - person vene; 01.06.2010
comment
WCF действительно не стоило возиться с 2.4, это был скорее предварительный просмотр, чем что-либо еще. Многие сценарии работают в 2.6, но многое не реализовано и много сломано. Они исправили много неработающих вещей в 2.8, поэтому я очень надеялся, когда проверял последнюю дневную версию; но без кубиков. Мне интересно следить за любым прогрессом, который вы делаете с этим, поскольку я хотел бы использовать NetTcpBinding (но без дуплекса) в проекте, над которым я работаю. - person TheNextman; 01.06.2010
comment
Действительно, кажется, что Mono NetTcpBinding не работает в данный момент. Я даже пытался написать безголовый сервер, работающий под Windows с .NET, чтобы использовать только клиентскую часть дуплексной привязки под Mono. Это тоже не сработало. - person vene; 01.06.2010

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

Я разместил его на странице Novell Bugzilla, если вам интересно, как продвигается работа. .

person alexcepoi    schedule 02.06.2010