Размещение службы WCF через консоль - PullRequest
0 голосов
/ 06 января 2011

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

Метаданные содержат ссылку, которую невозможно разрешить: 'net.tcp: //192.0.0.0: 9100 / ConsoleApplication3 /Communicator.svc / mextcp.Не удалось подключиться к net.tcp: //192.0.0.0: 9100 / ConsoleApplication3 / Communicator.svc / mextcp.Попытка подключения продолжалась в течение промежутка времени 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>

1 Ответ

2 голосов
/ 06 января 2011

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

Вы сами разместили службу в консольном приложении с 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 веб-службы, и я не знаю, откуда у вас этот /mextcp адрес из .....

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

alt text

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...