Добавление пользовательских заголовков SoapClient

Я полный новичок в С# и безуспешно пытаюсь взломать это уже пару часов...

Мне нужно создать SoapClient для использования на С#... Я пытался перенести существующий php-клиент на С#.

в основном: мне нужно сделать запрос с заголовком Soap, который содержит пользователя и пароль, это пример xml, который я должен отправить.

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webservices.paymentmanager.mycheck.com">
    <soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <wsse:UsernameToken>
                <wsse:Username>test</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </soapenv:Header>
    <SOAP-ENV:Body>
        <ns1:testws>
            <ns1:x>1</ns1:x>
        </ns1:testws>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Я использовал Visual Studio "Добавить ссылку на службу..." Когда я выполняю

Сервис работает хорошо, так как с использованием php он работает блестяще.

С#, который я придумал:

namespace ConsoleApplication1
{
    class Program
    {
        const String VENDOR_ID = "8723";
        const String VENDOR_PASS = "test";
        const String VENDOR_USER = "pass";
        static void Main(string[] args)
        {
            try
            {
                PaymentManager.PaymentManagerPortTypeClient test = new PaymentManager.PaymentManagerPortTypeClient();
                int num = test.testws(5);
                Console.WriteLine(num);
            }
            catch( Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }

}

очевидно, я не знал, как реализовать заголовки Soap, поэтому он выдает исключение «Отсутствующие заголовки SOAP» (которое получено от WebService).


person Itai Sagi    schedule 03.06.2012    source источник


Ответы (2)


У меня такая же проблема. Я не нашел решения. В конце концов мне пришлось создать целое сообщение SOAP и отправить его через HTTPWebRequest.

Посмотрите здесь.

person Alberto De Caro    schedule 02.07.2012

Вот пример того, как отправлять заголовки аутентификации веб-сервисам мыла: Аутентификация для веб-служб (с использованием заголовков SOAP)

person Anas    schedule 03.06.2012
comment
Если я получу ваш ответ, необходимо изменить реализацию службы, не так ли? Что делать, если у вас нет доступа к услугам? - person Alberto De Caro; 29.06.2012
comment
@ADC Вы имеете в виду серверную часть? нет, в примере просто описано, как создать мыльный вызов (на стороне клиента). - person Anas; 29.06.2012
comment
Я не согласен. Предлагаемое решение гласит: Чтобы принудительно использовать наш новый заголовок SOAP, нам нужно добавить следующий атрибут к нашему методу:[...]. Таким образом, кажется, что услуга должна быть изменена. - person Alberto De Caro; 29.06.2012
comment
Нам нужно добавить заголовок мыла для аутентификации для SoapClient. - person cat_minhv0; 03.08.2016
comment
@AlbertoDeCaro нет, вы добавляете аннотацию [SoapHeader к методу клиента с аннотацией [WebMethod в соответствующей заглушке клиента веб-службы. - person rustyx; 22.08.2018