2016-01-28 4 views
1

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

Is possible to access WCF Service without adding Service Reference?

я установки службы TCP, с помощью проекта WCF Service Library в Visual Studio, следуя этому руководству.

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

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

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

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

Поэтому я попытался использовать этот код. Я добавил ссылку на System.ServiceModel (и директиву использования), чтобы устранить большую часть ошибок. Но теперь он говорит: «Тип или имя пространства имен« ServiceContract »не удалось найти (вы не указали директиву использования или ссылку на сборку?)». Нужно ли мне модифицировать 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); 

enter image description here

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

myService.Close(); 

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

enter image description here

Ошибка во 2-ом диалоге:

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

ответ

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> 
Смежные вопросы