Итак, у меня есть служба WCF, которая прослушивает как net.tcp, так и net.pipe. Я создал прокси-клиент WCF, и я хотел бы, чтобы он мог подключаться через tcp или named pipe. Я не хочу config в app.config, но в коде.WCF Bindings
Клиент WCF получит адрес конечной точки во время выполнения, что-то вроде «net.tcp: // mymachine: 10001/MyService» или «net.pipe: // localhost/MyService». Я бы подумал, что он просто использует правильный NetTcpBinding или NetNamedPipeBinding, основанный на схеме Uri, но это выглядит не так.
Могу ли я просто настроить прокси-сервер, чтобы использовать или именованные каналы или привязки tcp, и он выберет тот, который основан на адресе конечной точки?
EDIT: Хорошо, так что я нюхать схему и заполнить связывание:
var uri = new Uri("net.tcp://localhost:10001/MyService");
Binding b;
if (uri.Scheme == Uri.UriSchemeNetPipe) {
b = new NetNamedPipeBinding();
} else if (uri.Scheme == Uri.UriSchemeNetTcp) {
b = new NetTcpBinding();
} else if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) {
b = new WSHttpBinding();
}
var proxy = new ClientProxy(b, new EndpointAddress(uri));
, но я получаю ошибку соединения - «Коммуникационный объект System.ServiceModel.Channels.ServiceChannel, не может быть использован для потому что он находится в состоянии «Сбой».
Если вы изменяете привязку к BindingElement и используете NamedPipeTransportBindingElement, TcpTransportBindingElement и т. Д. С CustomBinding, это работает ... но я не уверен, что понимаю, в чем разница.
Краткая дискуссия по теме [Понимание привязок WCF и стека каналов] (http://wcfanswers.blogspot.com/2012/06/understanding-wcf-bindings-and-channel.html). Пройдите это, чтобы понять, какой привязкой следует использовать для какого сценария. –