У меня проблемы с выяснением, как заставить работать службу WCF с именованным каналом.
Сервис находится в отдельной сборке из исполняемого файла.
Конфиг выглядит так:
<system.serviceModel>
<bindings>
<netNamedPipeBinding>
<binding name="NoSecurityIPC">
<security mode="None" />
</binding>
</netNamedPipeBinding>
</bindings>
<client>
<endpoint name="internal"
address="net.pipe://localhost/"
binding="netNamedPipeBinding"
bindingConfiguration="NoSecurityIPC"
contract="TimeService.ITimeService" />
</client>
<services>
<service name="TimeService">
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost/" />
</baseAddresses>
</host>
<endpoint name="internal"
address="net.pipe://localhost/"
binding="netNamedPipeBinding"
bindingConfiguration="NoSecurityIPC"
contract="TimeService.ITimeService" />
</service>
</services>
</system.serviceModel>
Я использую ChannelFactory для создания прокси для доступа к хосту службы:
ServiceHost h = new ServiceHost(typeof(TimeService), new Uri("net.pipe://localhost/"));
h.AddServiceEndpoint(typeof(ITimeService), new NetNamedPipeBinding("NoSecurityIPC"), "");
h.Open();
ChannelFactory<ITimeService> factory = new ChannelFactory<ITimeService>("internal");
ICpTimeService proxy = factory.CreateChannel();
using (proxy as IDisposable)
{
this.ds = proxy.LoadData();
}
Я не уверен, что делаю неправильно, когда создаю ChannelFactory. Это не может найти "канал1" в конфигурации. Когда я создаю привязку вручную и передаю ее конструктору ChannelFactory, фабрика и прокси-сервер создаются, но вызов LoadData () завершается неудачно (время ожидания истекло).
Кто-нибудь может увидеть, что я здесь делаю не так?
РЕДАКТИРОВАТЬ: я отредактировал выше app.config, чтобы убедиться, что обе конечные точки имеют одинаковые данные. Это устранило мою проблему на канале.
однако вызов метода обслуживания, как описано выше, по-прежнему истекает.