Добавление заголовков http при вызове к сервису SoapHttpClient
Я должен использовать услугу, предоставляемую одним из наших партнеров. Мне дали небольшое указание, но мне сказали, что безопасность должна быть PasswordDigest. Я посмотрел его и сразу увидел множество ссылок на WSE, так что я пошел. Это было очень легко реализовать, и в одно мгновение у меня был стандартный токен пользователя WSE, использующий PasswordDigest, который находился в заголовках SOAP моих сообщений.
Когда мы начали тестирование сегодня, мне сразу же (по сообщению об ошибке) сказали, что все не так. Оказывается, наш партнер не смотрит в заголовок SOAP, а хочет получить информацию о безопасности в заголовке http.
Я видел много статей о том, как добавить пользовательские заголовки http в прокси-класс, но мой прокси наследуется от SoapHttpClientProtocol, который не имеет коллекции заголовков для добавления. Я смотрел на создание необработанного httpWebRequest, но у меня есть особый метод доступа, который имеет несколько сложных параметров, с которыми приходится иметь дело (и, кроме того, это похоже на возврат назад).
Каков наилучший способ добавления пользовательских заголовков http в класс прокси-сервера службы, у которого нет метода GetWebRequest?
Для справки:
Декларация класса прокси:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MtomServiceSoap11", namespace="http://ws.xxxxxxx.com/")]
public partial class MtomServiceService : System.Web.Services.Protocols.SoapHttpClientProtocol {
Целевой метод мне нужно вызвать:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("uploadDocumentResponse", Namespace="http://ws.edsmtom.citizensfla.com/")]
public uploadDocumentResponse uploadDocument([System.Xml.Serialization.XmlElementAttribute(Namespace="http://ws.xxxxxxx.com/")] uploadDocumentRequest uploadDocumentRequest) {
object[] results = this.Invoke("uploadDocument", new object[] {
uploadDocumentRequest});
return ((uploadDocumentResponse)(results[0]));
}
}
Фактический звонок в Сервис прост. Передаваемые объекты не являются:
request.criteria = docCriteria;
request.document = document;
var result = service.uploadDocument(request);
Благодарю.
1 ответ
Это показывает, что через 30 минут после публикации я наткнулся на ответ. Хотя замедление прокси-класса не создает метод GetWebRequest, его базовый класс System.Web.Services.Protocols.SoapHttpClientProtocol имеет его, и его можно переопределить.
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
var request = base.GetWebRequest(uri);
request.Headers.Add("blah", "blah"); // <----
return request;
}