Я использовал WebReference, и принимающему серверу требуется заголовок WS-Security:
<wsse:UsernameToken wsu:Id="Example">
<wsse:Username> ... </wsse:Username>
<wsse:Password Type="..."> ... </wsse:Password>
<wsse:Nonce EncodingType="..."> ... </wsse:Nonce>
<wsu:Created> ... </wsu:Created>
</wsse:UsernameToken>
Я предполагал, что это будет включено в WSDL, однако после прочтения этот пост Я понимаю, что логика должна быть разделена.
Класс клиента, который я использую для выполнения запроса, содержит свойство Proxy IWebProxy:HttpWebClientProtocol
. Я считаю, что именно здесь я должен предоставить информацию о заголовке/переопределении. Пожалуйста, может кто-нибудь подтвердить это?
У меня также есть код, который, как я знаю, генерирует правильные заголовки. Однако я не уверен, как указать эти заголовки/элементы без изменения файла WebReference
.
public static Tuple<EndpointAddress, BindingElementCollection, string, string> PrepareGlowsAuth(string endpoint)
{
EndpointAddress soapEndpoint = new EndpointAddress(string.Format("{0}/{1}", (IsProduction ? productionBaseUrl : testingBaseUrl), endpoint));
BasicHttpsBinding binding = new BasicHttpsBinding();
binding.Security.Mode = BasicHttpsSecurityMode.TransportWithMessageCredential;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
BindingElementCollection elements = binding.CreateBindingElements();
elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true;
return new Tuple<EndpointAddress, BindingElementCollection, string, string>(soapEndpoint, elements, "username", "password");
}
Был бы признателен, если бы кто-то мог указать мне в правильном направлении!
Обновление: после следующего совета я не вижу классы Client или Response.