Нет ошибки прослушивания конечной точки на net.tcp - PullRequest
1 голос
/ 23 февраля 2012

Сервисная конфигурация

<service name="Services.MyService">
   <host>
      <baseAddresses>
         <add baseAddress="net.tcp://localhost:9000/Services/MyService/" />
      </baseAddresses>
    </host>
    <endpoint name="NetTcpService" 
        address="" 
        binding="netTcpBinding" 
        bindingConfiguration="TcpConfig"
        contract="Service.IMyService" />
    <endpoint 
        address="mex" 
        binding="mexTcpBinding" bindingConfiguration="TcpConfig" 
        contract="IMetadataExchange" />
  </service>

Код клиента:

var endPoint = new EndpointAddress("net.tcp://localhost:9000/Services/MyService/mex");
var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, SendTimeout = TimeSpan.MaxValue };
var channel = new ChannelFactory<IMyService>(binding, endPoint);
var proxy = channel.CreateChannel();

Ошибка:

Нет прослушивания конечной точки на "net.tcp: // localhost / Services / MyService / mex"

Службы tcp работают, брандмауэр выключен. Не уверен, что не хватает.

1 Ответ

3 голосов
/ 23 февраля 2012

Ваша фактическая служба прослушивает net.tcp://localhost:9000/Services/MyService/ - поэтому попробуйте изменить свой код так:

var endPoint = new EndpointAddress("net.tcp://localhost:9000/Services/MyService/");
var binding = new NetTcpBinding { TransferMode = TransferMode.Buffered, SendTimeout = TimeSpan.MaxValue };
var channel = new ChannelFactory<IMyService>(binding, endPoint);
var proxy = channel.CreateChannel();

Помимо изменения адреса, также используйте TransferMode.Buffered (вместо Streamed), который используется по умолчанию - я не вижу никакой конфигурации в вашей конфигурации на стороне сервера, которая указала бы, что вы используете режим потоковой передачи.

Адрес net.tcp://localhost:9000/Services/MyService/mex является обмен метаданными адрес - не ваша услуга.Эта конечная точка необходима для того, чтобы ваши клиенты могли опрашивать службу, чтобы узнать, какой метод сервиса он предлагает, какие параметры он ожидает и т. Д. - все, что необходимо для создания прокси-кода на стороне клиента.Но это НЕ адрес службы, на которой живет ваша реальная служба и отвечает на запросы.

...