это мой первый подход к WCF и именованным каналам.
Мне нужно windows прослушивать именованный канал, в то время как маленький GUI сообщает, что делать через канал.
Все работает хорошо: звонки сделаны в службу, ответы доставляются на GUI, и работа выполняется. Но если я отправлю два одновременных запроса от GUI, то служба будет обрабатывать их один за другим: я бы хотела вручную управлять стороной службы параллелизма и позволить ей запускать оба запроса одновременно.
I Я пытался создать 2 разных канала для 2 запросов, и он делает то, что мне нужно, но, конечно, это не решение.
Я использую. NET Framework 4.0, и я не могу его изменить.
Вот мой пример кода:
СЕРВИС: конфигурация канала
ServiceHost host = new ServiceHost(typeof(CommandReceiver), new Uri[] {new Uri("net.pipe://localhost") });
host.AddServiceEndpoint(typeof(ICommandReceiver), new NetNamedPipeBinding(), "myPipe");
host.Open();
СЕРВИС: Интерфейс и реализация контракта
[ServiceContract]
public interface ICommandReceiver
{
[OperationContract]
string Foo();
[OperationContract]
string Bar();
}
public class CommandReceiver : ICommandReceiver
{
public string Foo()
{
//Do stuffs
System.Threading.Thread.Sleep(3000);
return "FOO";
}
public string Bar()
{
//Do stuffs
System.Threading.Thread.Sleep(3000);
return "BAR";
}
}
КЛИЕНТ: конфигурация канала
ChannelFactory<ICommandReceiver> pipeFactory = new ChannelFactory<ICommandReceiver>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/myPipe"));
ICommandReceiver serviceProxy = pipeFactory.CreateChannel();
КЛИЕНТ: позвоните в службу
public string GetFoo()
{
return serviceProxy.Foo();
}
public string GetBar()
{
return serviceProxy.Bar();
}
Любые советы о том, как улучшить все это, даже переключившись на другой способ связи, будут очень полезны.
Большое спасибо заранее!