Как сгенерировать WCF-клиент из WSDL только для определенных конечных точек?

#c# #visual-studio #web-services #wcf #soap

#c# #visual-studio #веб-сервисы #wcf #soap

Вопрос:

У меня есть WSDL крупного корпоративного веб-сервиса, который включает в себя несколько конечных точек, из которых я собираюсь использовать только одну.

Я попытался сгенерировать клиент службы в Visual Studio, добавив ссылку на службу в проект. Проблема в том, что из-за большого количества конечных точек, доступных в службе, сгенерированный клиентский код в Reference.cs итоге содержит более 1 400 000 строк, и Visual Studio, похоже, с трудом справляется с этим (IntelliSense часто зависает, иногда весь VS вылетает), и я предполагаю, что время сборки будетслишком долго из-за этого.

И из сотен конечных точек я буду использовать только одну, остальные мне не понадобятся.
Есть ли способ сгенерировать код клиента из WSDL только для определенной конечной точки, либо с помощью справочного интерфейса службы Visual Studio, либо с svcutil помощью? Или, если нет, есть ли какой-нибудь другой простой способ сделать это?

Комментарии:

1. Привет, проблема решена? Если вы считаете, что мой ответ полезен для вас, вы можете пометить его как ответ.

2. Пока единственным решением, которое я смог найти, было редактирование WSDL вручную и удаление всех конечных точек и моделей данных, которые мне не нужны. Это было немного хлопотно, но все работало нормально.

Ответ №1:

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

 EndpointAddress address = new EndpointAddress("http://localhost:8000/GettingStarted/CalculatorService1111");

            BasicHttpBinding binding =new BasicHttpBinding();

            ChannelFactory<ICalculator> factory = new

                    ChannelFactory<ICalculator>(binding, address);

            ICalculator chanel = factory.CreateChannel();

         
  

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

Комментарии:

1. верно, но откуда берется код для ICalculator ? Это часть кода, сгенерированного с помощью svcutil или VS?