#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?