Мне нужно подключиться к службе WCF из собственного приложения на С++. Я попробовал ссылку ниже, и она работала с wsHttpBinding
.
Создайте службу WCF для неуправляемых клиентов С++
Однако мне нужно подключиться к службе WCF с пользовательской привязкой. Так выглядит код для пользовательского привязки в моем конфигурационном файле приложения
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="ResourceCenterEndpoint5">
<mtomMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Default" maxBufferSize="65536" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</mtomMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Ntlm"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536"
proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
</binding>
</bindings>
<client>
<endpoint address="http://usaabcxyzas1.na.abc.com/Build15/ReserSVC/Resource.svc"
binding="customBinding" bindingConfiguration="ResourceCenterEndpoint5"
contract="ServiceReference2.ResourceCenterServiceContract"
name="ResourceCenterEndpoint5">
<identity>
<userPrincipalName value="[email protected]" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
У меня есть DLL-мост, который является управляемой С++ DLL. Управляемая С++ DLL соединяет С# Client с нативным приложением. Однако я не могу подключиться к веб-службе из управляемой С++ DLL, поскольку веб-служба использует пользовательскую привязку. Ошибка, которую я получаю:
HTTP-запрос неавторизован с помощью схемы проверки подлинности клиента "Аноним". Под заголовком аутентификации, полученным от терминала, был "Negotiate, NTLM"
Вот как я пытался подключиться к Webservice из управляемой DLL С++:
Binding^ binding = gcnew BasicHttpBinding();
EndpointAddress^ address = gcnew EndpointAddress(gcnew String("http://usaabcxyzas1.na.abc.com/Build15/ReserSVC/Resource.svc"));
HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient^ client = gcnew HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient(binding, address);
client->DoWork();
Так что в основном мне нужно подключить управляемую С++ dll к службе WCF с пользовательской привязкой. Как я могу это сделать?