добавление заголовков 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);

Спасибо.

16
задан Seth Denburg 23 January 2017 в 22:28
поделиться