Конечная точка net.pipe не может быть подключена из клиентского приложения
Я столкнулся с проблемой, связанной с конечной точкой net.pipe моей службы WCF. Я настроил необходимые роли сервера (приложения и веб-роли) и функции (активация Windows) на компьютере под управлением Windows 2008 R2. Я создал образец сервиса wcf с конечными точками net.tcp, net.pipe и http и разместил его в IIS. Я включил обязательное связывание на уровне сайта, а также на уровне веб-приложений. Конечные точки net.tcp и http работают нормально. Но получаю ошибку для конечной точки net.pipe, как указано ниже
System.ServiceModel.EndpointNotFoundException: не было конечной точки, прослушивающей net.pipe://localhost/MyWCFService/Service1.svc, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если имеется, для более подробной информации.
Трассировка стека сервера:
в System.ServiceModel.Channels.ConnectionUpgradeHelper.DecodeFramingFault(декодер ClientFramingDecoder, соединение IConnection, Uri via, String contentType, TimeoutHelper& timeoutHelper)
в System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(соединение IConnection, преамбула ArraySegment`1, TimeoutHelper & timeoutHelper)
в System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(соединение IConnection, TimeoutHelper& timeoutHelper)
в System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(время ожидания TimeSpan)
в System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(время ожидания TimeSpan)
в System.ServiceModel.Channels.CommunicationObject.Open(время ожидания TimeSpan)
в System.ServiceModel.Channels.ServiceChannel.OnOpen(время ожидания TimeSpan)
в System.ServiceModel.Channels.CommunicationObject.Open(время ожидания TimeSpan)
в System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(канал ServiceChannel, время ожидания TimeSpan)
в System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(время ожидания, каскад CallOnceManager)
в System.ServiceModel.Channels.ServiceChannel.Call(действие String, логический односторонний режим, операция ProxyOperationRuntime, Object[] ins, Object[] outs, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(метод IMethodCallMessageCall, операция ProxyOperationRuntime)
в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(сообщение IMessage)
Исключение переброшено в [0]:
в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, тип Int32)
в NetPipeValidation.ServiceReference1.IService1.GetData(значение Int32)
в NetPipeValidation.ServiceReference1.Service1Client.GetData(значение Int32)
в NetPipeValidation.Form1.button1_Click(Отправитель объекта, EventArgs e)
Моим первоначальным подозрением был протокол net.pipe, который неправильно активирован. Таким образом, проверено, что все необходимые службы Windows работают правильно (WAS, Net.Pipe Adaptar, Net.Tcp Adaptar). Я также проверил файл SMSvcHost.exe.config и убедился, что он имеет правильную конфигурацию.
Так как все службы работают, я включил счетчик производительности и проверил, успешна ли моя регистрация на net.pipe. Regitrations Active для net.pipe и Uris Зарегистрированные для Net.pipe имеют значение 1. При этих значениях счетчика я предполагаю, что моя конечная точка правильно настроена и действительна с точки зрения сервера.
По какой-то причине конечная точка недоступна со стороны клиента. Есть ли какие-либо другие проверки, которые мне нужно сделать в машине?
1 ответ
net.pipe предназначен для вызовов x-процесса, а не вызовов x-machine. Если вы пересекаете границы компьютера, вы используете http и / или net.tcp. Если вы клиент, и сервис находится на одном компьютере, вам следует использовать net.pipe.