SoapClient в C # dll вызывается в C ++ проекте: конечная точка не найдена

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

Поэтому я решил добавить интерфейс в C #, то есть я создам SOAP-клиент в C #, который будет вызывать каждую функцию веб-службы (в VS2015 это можно сделать только в приложении Windows Form, не знаю, почему …).

Затем я экспортирую эти функции, скомпилировав проект C # в виде DLL с нюгетом UnmanagedExports of Роберт Гизеке, DLL, который я буду загружать в моем конечном проекте в C ++.

Однако, когда я пытаюсь вызвать веб-сервис в скрипте C ++, мое приложение вылетает с этим журналом

Unhandled Execption: System.InvalidOperationException :
Could not find default endpoint element that references contract DockersWS.DockersWS
in the ServiceModel client configuration section. This might be because no configuration
file was found in your application or because no endpoint element matching this contract
could be found in the client element
at RawCSSoap\Services references\DockersWS\Reference.cs line 898

DockersWS — это имя веб-службы, вызываемой в клиенте C # SOAP. Строка 898 из References.cs выглядит следующим образом:

public DockersWSClient() {}

Я создаю клиента в приложении C #, прямо в функции, которую я экспортирую.

DockersWS.DockersWSClient client = new DockersWS.DockersWSClient();

Мой app.config, сгенерированный VS2015, когда я добавил ссылку на сервис, выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="DockersWSPortBinding" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://nxl35726:8080/DockersWS/DockersWS"binding="basicHttpBinding" bindingConfiguration="DockersWSPortBinding"contract="DockersWS.DockersWS" name="DockersWSPort" />
</client>
</system.serviceModel>

И часть файла WSDL, касающаяся конечной точки, выглядит так:

<binding name="DockersWSPortBinding" type="tns:DockersWS">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<!--bunch of operations-->
</binding>
<service name="DockersWS">
<port name="DockersWSPort" binding="tns:DockersWSPortBinding">
<soap:address location="http://nxl35726:8080/DockersWS/DockersWS" />
</port>
</service>

Я видел, что иногда создается файл web.config. Но я не получил это. Может быть, в этом и проблема, но как я могу это сгенерировать?

Я пытался добавить файл app.config в проект C ++ в качестве ресурса, но это не помогло.

Итак, мой вопрос: как я могу полностью использовать клиентские функции SOAP в проекте C ++, не имея этой проблемы с конечной точкой?

0

Решение

НАЙТИ ТРЮК:

Весь этот беспорядок связан с тем, что app.config в проекте C # не экспортируется в DLL. Таким образом, проект C ++ не имеет возможности настроить вызов для создания клиента.

Поэтому решение состоит в том, чтобы жестко закодировать конфигурацию клиента в функции C #, экспортировать эту функцию и вызвать ее в своем приложении C ++.

Вот код для замены файла app.config

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "DockersWSPortBinding";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
EndpointAddress endpointAddress = new EndpointAddress("http://nxl35726:8080/DockersWS/DockersWS?wsdl");
proxyClient = new DockersWS.DockersWSClient(basicHttpbinding, endpointAddress);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector