Использование службы WCF от клиента без ссылки на проект / сборку библиотеки служб WCF

Следующий вопрос может быть дубликатом, но из него не было достаточно информации, чтобы ответить на мой вопрос.

Можно ли получить доступ к службе WCF без добавления ссылки на службу? < / а>

Я установил службу TCP, используя проект библиотеки служб WCF в Visual Studio, следуя этому руководству.

https://msdn.microsoft.com/en-us/library/ff649818.aspx

Это прекрасно сработало, если вы добавили ссылку на проект библиотеки служб WCF из своего клиента (проект Windows Forms). И добавьте оператор using в сборку проекта и используйте этот код.

        TcpService.Service myService = new TcpService.Service();
        myService.GetData(123);

Однако я не хочу добавлять ссылку на сборку TcpService в проект, вызывающий метод GetData. Согласно ответу на самый первый вопрос выше.

Итак, я попробовал использовать этот код. Я добавил ссылку на System.ServiceModel (и директиву using) для устранения большинства ошибок. Но теперь он говорит: «Не удалось найти тип или имя пространства имен 'ServiceContract' (вам не хватает директивы using или ссылки на сборку?)». Нужно ли мне изменять App.Config в моей службе или добавлять какой-либо другой код (в отношении «ServiceContract») в проект, вызывающий этот код ниже?

        BasicHttpBinding binding = new BasicHttpBinding();
        EndpointAddress address = new EndpointAddress("net.tcp://localhost:8523/Service");
        ChannelFactory<ServiceContract> factory = new ChannelFactory<ServiceContract>(binding, address);
        ServiceContract channel = factory.CreateChannel();
        channel.GetData(123);

введите описание изображения здесь

Примечание. Я переименовал Service1.cs по умолчанию и интерфейс IService1.cs по умолчанию в Service.cs и IService.cs. Без "1" в качестве суффикса, в соответствии с инструкциями. Я также переименовал WcfServiceLibrary1 в TcpService в своем коде. Кроме того, в .NET 4.5 мне вообще не требовалась эта строка кода, чтобы она работала. Ошибка .Close ().

myService.Close();

Я добавил ссылку на службу в Visual Studio, щелкнув правой кнопкой мыши Project> Add> Service Reference. Но у меня там ошибка.

введите описание изображения здесь

Ошибка во втором диалоге:

Префикс URI не распознается. Метаданные содержат ссылку, которую невозможно разрешить: 'net.tcp: // localhost: 8523 / Service'. Не удалось подключиться к net.tcp: // localhost: 8523 / Service. Попытка подключения длилась 00: 00: 01.0011001. Код ошибки TCP 10061: невозможно установить соединение, поскольку целевая машина активно отказалась от него 127.0.0.1:8523. Невозможно установить соединение, потому что целевая машина активно отказалась от него 127.0.0.1:8523 Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.


person MacGyver    schedule 28.01.2016    source источник


Ответы (1)


В руководстве отсутствовал шаг. Я установил httpsGetEnabled на "false" в дополнение к атрибуту httpGetEnabled, и это сработало! После этого я больше не получал ошибку при добавлении ссылки на службу. Затем я изменил ServiceContract на MyClientProject.ServiceReference1.IService, чтобы он ссылался на новую ссылку на службу.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

...

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>
person MacGyver    schedule 28.01.2016