Служба Mono WCF NetTcp принимает только один клиент за раз
при попытке создать клиент-серверное приложение WCF в Mono мы столкнулись с некоторыми проблемами. Сведя его к простому примеру, мы обнаружили, что Служба принимает только одного клиента за раз. Если другой клиент пытается подключиться, он зависает, пока первый не отключится.
простое изменение на BasicHttpBinding исправляет его, но нам нужен NetTcpBinding для дуплексной связи. Также проблема не появляется, если скомпилирована под MS .Сеть.
EDIT: я сомневаюсь (и надеюсь, что нет) что Mono не поддерживает то, что я пытаюсь сделать. Моно-код обычно бросает NotImplementedExceptions в таких случаях, насколько я заметил. Я использую 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 ответов
Я немного поиграл с этим, и это определенно похоже на ошибку Mono.
Я портирую приложение WCF для запуска в Mono на данный момент. Я играл с некоторыми вещами NetTcpBinding, но я не пробовал этот сценарий (несколько подключений к узлу моно-размещенной службы). Однако теперь я попробую, я могу воспроизвести-как в 2.6, так и в последнем ежедневном пакете.
Он работает в .NET, однако. Любая разница в поведении между Mono и .NET классифицируется как жук. Вы должны зарегистрировать его на Bugzilla с тестовым случаем, я бы также разместил в Mono newslist.
удачи.
определенно ошибка. Мне интересно, была ли версия, что она работала правильно...
Я разместил его в Компания Novell Bugzilla С, если вы не заинтересованы в его прогрессе.