2016-06-17 2 views
3

Пытается получить простую демонстрацию NetTcpBinding, чтобы расширить ее в другой проект.NetTcpBinding - Self-Hosted WCF - Не удается подключиться к клиенту

Архитектура: 2 консольных приложения (1 хост/сервер, 1 клиент) и 1 проект библиотеки типов. Оба консольных приложения имеют ссылку на проект библиотеки типов.

Хост приложения: приложение

class Program 
{ 
    static void Main() 
    { 
     var netTcpBinding = new NetTcpBinding(SecurityMode.None) 
     { 
      PortSharingEnabled = true 
     }; 

     var netTcpAdddress = new Uri("net.tcp://127.0.0.1:1234/HelloWorldService/"); 

     var tcpHost = new ServiceHost(typeof(HelloWorldService), netTcpAdddress); 
     tcpHost.AddServiceEndpoint(typeof(IHelloWorld), netTcpBinding, "IHelloWorld"); 

     tcpHost.Open(); 
     Console.WriteLine($"tcpHost is {tcpHost.State}. Press enter to close."); 

     Console.ReadLine(); 
     tcpHost.Close(); 
    } 
} 


public class HelloWorldService : IHelloWorld 
{ 
    public void HelloWorld() 
    { 
     Console.WriteLine("Hello World!"); 
    } 

    public void WriteMe(string text) 
    { 
     Console.WriteLine($"WriteMe: {text}"); 
    } 
} 

Клиент:

static void Main() 
    { 
     Console.WriteLine("Press enter when the service is opened."); 
     Console.ReadLine(); 


     var endPoint = new EndpointAddress("net.tcp://127.0.0.1:1234/HelloWorldService/"); 
     var binding = new NetTcpBinding(); 
     var channel = new ChannelFactory<IHelloWorld>(binding, endPoint); 
     var client = channel.CreateChannel(); 

     try 
     { 
      Console.WriteLine("Invoking HelloWorld on TcpService."); 
      client.HelloWorld(); 
      Console.WriteLine("Successful."); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine($"Exception: {ex.Message}"); 
     } 

     Console.WriteLine("Press enter to quit."); 
     Console.ReadLine(); 
    } 

Тип библиотеки:

[ServiceContract] 
public interface IHelloWorld 
{ 
    [OperationContract] 
    void HelloWorld(); 

    [OperationContract] 
    void WriteMe(string text); 
} 

I опровергают ве у меня есть все необходимые услуги установки и запуска:

enter image description here

Очевидно, что я пытаюсь сделать все конфигурации во время выполнения.

Я постоянно получаю сообщение об ошибке на клиенте:

Вызывающую HelloWorld на TcpService.

Исключение: Там не было конечной точкой прослушивания на net.tcp: //127.0.0.1: 1234/HelloWorldService /, который может принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. InnerException, если имеется, для более подробной информации. Нажмите enter для выхода.

Я пропустил что-то очевидное?

+0

Есть ли внутреннее исключение? Является ли приложение хоста запущенным при запуске клиента? Является ли приложение-хост запущенным под учетной записью с правами администратора? – Tim

+0

InnerException пуст. Он работает с правами администратора и не работает (правильно) при запуске без него. FWIW: Я работал с http привязками, но пытался переключиться на netTcp, потому что я не хотел использовать admin privs. Может быть, придется отказаться от этой идеи. –

ответ

1

Ваша служба выставляет конечную точку по адресу:

net.tcp://127.0.0.1:1234/HelloWorldService/IHelloWorld

но ваш клиент подключается к:

net.tcp://127.0.0.1:1234/HelloWorldService/

Вам также необходимо настроить клиент NetTcpBindingSecurityMode в как сервер (None).

+0

Ты прибил его! Я не понимал, что путь расширяется с именем интерфейса. Спасибо! Для читателей: добавление безопасности = {Mode = SecurityMode.None} в мой инициализатор привязки и установка endPoint = new EndpointAddress («net.tcp: //127.0.0.1: 1235/HelloWorldService/IHelloWorld») решили все! –

Смежные вопросы