Вопрос

Я пытаюсь использовать сторонний веб-сервис (поэтому у меня нет доступа к коду веб-сервиса). В Visual Studio 2008 я создал новый проект веб-сайта (ASP и c #) и добавил веб-ссылку (не веб-службу! Так что я предполагаю, что это не служба WCF ... правильно?).

Проблема в том, что из документации веб-службы я знаю, что каждый запрос на мыло должен отправляться со следующим конвертом и заголовком. Скажите, пожалуйста, как добавить это в мои запросы на мыло? Все решения, которые я нашел, требовали изменения источника веб-службы или прокси-сервера, я не могу этого сделать, потому что у меня нет доступа к источнику веб-службы, а прокси-сервер веб-службы в клиенте в Visual Studio 2008 доступен только для чтения. временный файл!

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" soap:mustUnderstand="1">
<wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Username>gimme.data@stats.com</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Ima5tatto</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body xmlns:ns2="http://neighbourhood.statistics.gov.uk/nde/v1-0/discoverystructs">
<ns2:AreaAtLevelElement>
<AreaIdWithLevelType>
<AreaId>276704</AreaId>
<LevelTypeId>12</LevelTypeId>
</AreaIdWithLevelType>
</ns2:AreaAtLevelElement>
</soap:Body>
</soap:Envelope>
Это было полезно?

Решение

Вы можете статически добавлять заголовки к сообщениям в файле конфигурации, используя заголовки элемент в конечной точке элемента. Каждый дочерний элемент элемента заголовков будет скопирован как есть в заголовке вашего сообщения.

Другие советы

Я борюсь с этой же проблемой и до сих пор написал сообщение Инспектор , чтобы иметь возможность получить доступ к заголовкам SOAP, хотя я не уверен, как получить туда wsse: security без необходимости делать это вручную. Я хотел бы иметь возможность использовать схему WS-Security (а также схемы SAML) для создания wsse: security stuff ...

Для чего стоит мой код инспектора сообщений ниже, если я решу это, я опубликую его в этой теме.

Вот где я добавляю поведение клиенту:

client.Endpoint.Behaviors.Add(new CustomBehavior());
msgOutput = client.ProvideAndRegisterDocumentSetXDR(msgInput);

А вот инспектор сообщений и пользовательское поведение:

public class CustomMessageInspector : System.ServiceModel.Dispatcher.IClientMessageInspector
{
    public void AfterReceiveReply(ref WCF.Message reply, object correclationState)
    {
    }

    public Object BeforeSendRequest(ref WCF.Message request, IClientChannel channel)
    {
        MessageHeaders headers = new MessageHeaders(MessageVersion.Soap11WSAddressing10);
        MessageHeader header = MessageHeader.CreateHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "");
        request.Headers.Add(header);
        return null;
    }
}


public class CustomBehavior : System.ServiceModel.Description.IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRunTime)
        {
            CustomMessageInspector inspector = new CustomMessageInspector();
            clientRunTime.MessageInspectors.Add(inspector);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
        }

        public void Validate(ServiceEndpoint endpoint)
        {
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top