Не удается подключиться к службе WCF NetTcpBinding из-за ошибки «Не было прослушивания конечной точки» - PullRequest
0 голосов
/ 18 февраля 2012

Не могли бы вы, ребята, указать, что мне здесь не хватает?

У меня есть два примера проектов. Оба консольных приложения (.Net 3.5). Вот "серверная" сторона:

class Program
{
    static void Main()
    {
        var baseAddresses = new Uri("net.tcp://localhost:9000/WcfServiceLibrary/svc");

        var host = new ServiceHost(typeof(UiWcfSession), baseAddresses);

        var reliableSession = new ReliableSessionBindingElement { Ordered = true, InactivityTimeout = TimeSpan.MaxValue };
        var binding = new CustomBinding(reliableSession, new TcpTransportBindingElement()) { ReceiveTimeout = TimeSpan.MaxValue };

        host.AddServiceEndpoint(typeof(IClientFulfillmentPipeService), binding, k.WinSvcEndpointName);
        host.Open();

        Thread.CurrentThread.Join();
    }
}

Не уверен, что это важно, но вот небольшой фрагмент IClientFulfillmentPipeService

  [ServiceContract(CallbackContract = typeof (IClientFulfillmentPipeServiceCallbacks), SessionMode = SessionMode.Required)]
  public interface IClientFulfillmentPipeService
  {
    [OperationContract(IsOneWay = true)]
    void Initialize(int uiProcessId, string key);
  }


  [ServiceContract]
  public interface IClientFulfillmentPipeServiceCallbacks
  {
    [OperationContract(IsOneWay = true)]
    void ShowBalloonTip(int timeout, string tipTitle, string tipText, BalloonTipIcon tipIcon);
  }

и, наконец, клиент

    private void OpenConnection()
    {

        try
        {
            var ep = new EndpointAddress("net.tcp://localhost:9000/WcfServiceLibrary/svc");

            var reliableSession = new ReliableSessionBindingElement {Ordered = true};

            Binding binding = new CustomBinding(reliableSession, new TcpTransportBindingElement());
            reliableSession.InactivityTimeout = TimeSpan.MaxValue;
            var pipeFactory = new DuplexChannelFactory<IClientFulfillmentPipeService>(this, binding, ep);
            commChannel = pipeFactory.CreateChannel();

            ((IChannel) commChannel).Open(OpenConnectionTimeout);
        }
        catch (Exception ex)
        {
            Log.ErrorFormat("The communication channel to the windows service could not be established.  {0}", ex.Message);
        }
    }

Клиент терпит неудачу с исключением System.ServiceModel.EndpointNotFoundException, которое говорит: "Не было конечной точки, прослушивающей net.tcp: // localhost: 9000 / WcfServiceLibrary / svc, которая могла бы принять сообщение. Это часто вызвано неправильным адрес или действие SOAP. См. InnerException, если имеется, для получения дополнительной информации. "

Это модификация производственного кода, который использует именованные каналы, и я хочу преобразовать его в транспорт Tcp.

Спасибо!

1 Ответ

1 голос
/ 18 февраля 2012

Я случайно оставил k.WinSvcEndpointName в определении конечной точки на сервере.Это была проблема.

...