C # - пытается построить клиент веб-службы из WSDL, но файл конфигурации не предоставляется - PullRequest
0 голосов
/ 31 августа 2018

Я только знакомлюсь с WCF, и мне нужно добавить дополнительные функциональные возможности в работающий веб-сервис на работе. Поскольку я чувствую необходимость проверить функциональность перед ее развертыванием, я решил создать тестовый клиент. Здесь возникает проблема. Я создал консольное приложение только для тестирования клиента и попытался добавить ссылку на сервис через предоставленный WSDL, но он не работал. Конфигурационный файл не был создан. Сначала я попробовал опцию «Добавить ссылку на службу» в VS, и когда она не работала, я попытался создать файлы Proxy и Config с помощью svcutil.exe ... Создается только прокси-класс ... Когда я пытаюсь создать экземпляр "объекта клиента" из этого класса, выдается следующее исключение: "Could not find default endpoint element that references contract 'eOrderingService.IeOrderingService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element."

Поскольку это работающий сервис (его использует чешская компания), очевидно, должен быть способ создать web.config или app.config даже вручную, но я не знаю, с чего начать. Как я уже сказал, Я только знакомлюсь с WCF, поэтому я начал искать в Интернете, но большинство проблем, так или иначе связанных с моей проблемой, были в разных частях уже созданных файлов конфигурации. Мне удалось обойти это исключение, добавив в app.config следующее:

<system.serviceModel>
<services>
  <service name="eOrderingService" >
    <endpoint
        address="http://localhost:61472/eOrderingService.svc"
        binding="webHttpBinding"
        contract="eOrderingService.IeOrderingService" >          
    </endpoint>        
  </service>      
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp helpEnabled="true" />
    </behavior>
  </endpointBehaviors>
</behaviors>
<client>
  <endpoint
    address="http://localhost:61472/eOrderingService.svc"
    binding="webHttpBinding"
    bindingConfiguration=""
    contract="eOrderingService.IeOrderingService"
    behaviorConfiguration="web"
    name="DeliveryNote" >        
  </endpoint>      
</client>  

В службе много методов, и один из них, который мне нужно проверить, называется 'DeliveryNote'. Допустим, сервис находится по этому адресу:

http://localhost:61472/eOrderingService.svc

Метод POST, который мне нужно вызвать:

http://localhost:61472/eOrderingService.svc/DeliveryNote

И соответственно метод GET:

http://localhost:61472/eOrderingService.svc/DeliveryNote?DocumentFilter={DOCUMENTFILTER}&CustomerID={CUSTOMERID}&FromDate={FROMDATE}

Ссылки работают, но я не могу понять, как их вызывать с клиента. Когда я тестировал вызов метода POST, я получил еще одно исключение:

The remote server returned an unexpected response: (400) Bad Request.

Это не должно быть правдой, потому что отправляемый мной запрос уже протестирован и является допустимым запросом в формате XML. Поэтому я попытался протестировать с помощью другого метода GET, который работает и получает только два DateTime параметра, а не XML. Если я попробую следующую ссылку:

 http://localhost:61472/eOrderingService.svc/PriceChanges?startDate=2018-08-29&endDate=2018-08-30

результат в порядке .. Но если я позвоню automatically generated method "PriceChanges", результат будет NULL. Я просто не понимаю, что я делаю неправильно. Кажется, что соединение с сервисом установлено, но методы не вызываются / строятся правильно. Возможно, потому что я не могу понять, как собрать <system.serviceModel> в app.config. Я определенно должен прочитать больше о веб-сервисах, но я не знаю, с чего начать.

...