2011-01-06 5 views
0

Я создал службу WCF и разместил ее через консоль. но когда я создал еще один веб-приложения и пытался добавить его справочной службы его ошибка отдаванияХостинг службы WCF через консоль

Метаданные содержат ссылки, которые не могут быть решены: «net.tcp: //192.0.0.0: 9100/ConsoleApplication3/Коммуникатор .svc/mextcp. Не удалось подключиться к net.tcp: //192.0.0.0: 9100/ConsoleApplication3/Communicator.svc/mextcp. Попытка подключения продолжалась в течение 0-временного интервала 00: 00: 00.9843750. TCP код ошибки 10061: соединение не может быть сделано, потому что целевая машина активно отказалась от нее 192.0.0.0:9100. Не удалось установить соединение, так как целевая машина активно отклонила его. 192.0.0.0:9100 Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу .

Вот код:

namespace ConsoleApplication3 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      using (ServiceHost host = new ServiceHost(typeof(Communicator))) 
      { 
       host.Open(); 
       Console.WriteLine("Press <Enter> to terminate the Host application."); 
       Console.ReadLine(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
      Console.ReadLine(); 
     } 
    } 
} 

[ServiceContract] 
public interface ICommunicator 
{ 
    [OperationContract] 
    string SayHello(); 
} 

public class Communicator : ICommunicator 
{ 
    public string SayHello() 
    { 
     return "I am here"; 
    } 
} 

А вот конфигурация:

<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="ConsoleApplication3.Communicator" behaviorConfiguration="CommunicatorBehavior"> 
     <!-- Service Endpoints --> 
     <endpoint address="ConsoleApplication3" binding="netTcpBinding" 
      contract="ConsoleApplication3.ICommunicator"/> 
     <!-- This Endpoint is used for genertaing the proxy for the client --> 
     <!-- To avoid disclosing metadata information, set the value below to false and 
     remove the metadata endpoint above before deployment --> 
     <endpoint address="mex" contract="IMetadataExchange" binding="mexTcpBinding" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:9100/"/> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="CommunicatorBehavior"> 
      <serviceMetadata httpGetEnabled="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

ответ

2

Я думаю, что вы получили неправильный адрес, чтобы попытаться получить к вашим услугам.

Вы разместили сервис самостоятельно в консольном приложении с netTcpBinding, и вы определили базовый адрес net.tcp://localhost:9100/, а конечная точка MEx - net.tcp://localhost:9100/mex.

Таким образом, вы должны использовать либо базовый адрес

net.tcp://localhost:9100/ 

или адрес MEX

net.tcp://localhost:9100/mex 

при попытке подключиться к службе.

Я не знаю, как вы пришли по этому адресу (net.tcp://192.0.0.0:9100/ConsoleApplication3/Communicator.svc/mextcp), с которым вы пытаетесь подключиться - но этот адрес не действительный. Прежде всего - нет * .svc файла, который будет использоваться при самостоятельной хостинг netTcpBinding WebService, и я не знаю, где вы получили этот /mextcp адрес из .....

Update: Я взял ваш код, создал новую консоль приложение с интерфейсом и службы реализации и вашей конфигурации службы, и он прекрасно работает на моей машине:

alt text

я получил предупреждение от брандмауэра Windows, когда я попытался запустить консольное приложение из Visual Studio о разрешении доступа - что я и допустил.

+0

Итак, каким должен быть адрес, который я попробовал 'net.tcp: // localhost: 9100/mex ', но все тот же самый обман – BreakHead

+0

@BreakHead: или этот, кажется, тот, который вы в конечном итоге собираетесь : 'net.tcp: //192.168.168.145: 9100/' –

+0

Thanx, но по-прежнему та же ошибка :( – BreakHead

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