powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Помогите подключится к API Merlion (WSDL, SOAP)
8 сообщений из 8, страница 1 из 1
Помогите подключится к API Merlion (WSDL, SOAP)
    #39824681
Romalti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

Уверен задача плёвая, но но я уже целый день убил на неё ((. Очень нужен help.

По работе надо протестировать работу по API с поставщиком Merlion (дистрибьютор).
API работает по протоколу SOAP. Подключение осуществляется по HTTPS протоколу с использованием Basic-аутентификации. Шифрование TLS версий 1.0, 1.1, 1.2.

WSDL-описание сервиса по ссылке .

Собственно проблема у меня с подключением к сервису. Что я делаю:
Создаю пустой проект.

Добавляю ссылку на службу (WSDL). Кстати при добавлении ссылки на службу сервис запрашивает логин/пароль, я пытаюсь их ввести, но окно с запросом логина/пароля просто исчезает на секунду, потом снова появляется.



Ошибки ни какой не выдаёт. В любом случае, после добавлении ссылки на службу автоматически создаются классы для работы с сервисом.

Один из классов называется MLPortClient, он по всей видимости и выступает в роли клиента web-службы.

Вот здесь для меня и начинаются сложности. Если просто создать класс без аргументов (есть такой конструктор), то при обращении к методам этого класса сервер не выдаст ответа, так как запрос по сути будет анонимным. MLPortClient имеет и другие конструкторы:


MLPortClient(string endpointConfigurationName)

MLPortClient(string endpointConfigurationName, string remoteAddress)

MLPortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress)

MLPortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress)

Эти конструкторы для меня тёмный лес. Я пытался найти какие то готовые примеры работы с этими объектами (и что то находил), но в конечном итоге положительного результата так и не смог получить. Я понимаю, что мне нужно как то передать способ аутентификации, логин и пароль, осталось понять как...

Буду признателен за любую помощь в данном вопросе.
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39824738
Romalti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно говоря дальше кода:
Код: c#
1.
2.
3.
4.
MLPortClient merlionApiClient = new MLPortClient();
merlionApiClient.ClientCredentials.UserName.UserName = @"Имя_пользователя";
merlionApiClient.ClientCredentials.UserName.Password = @"Пароль";
merlionApiClient.helloWorld( "TEST" );


...мне не удалось сдвинуться. Программа выдаёт ошибку: "System.ServiceModel.Security.MessageSecurityException: "Запрос HTTP не разрешен для схемы аутентификации клиента "Anonymous". От сервера получен заголовок аутентификации "Basic realm="Restricted access to web-service."
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39824768
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я писал СОАП-коннектор для мерлиона, но это было очень давно, сейчас могло всё поменяться. Вот кусок моей тогдашней проги, вдруг поможет:

Код: c#
1.
2.
3.
4.
5.
6.
          serv = new MerlionIZ.MLPortClient();
          serv.ClientCredentials.UserName.UserName = login;
          serv.ClientCredentials.UserName.Password = pass;

          fdLog.Invoke(logWriter, "чтение списка вариантов отгрузки... ");
          var ships = serv.getShipmentMethods("");
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39824839
Romalti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЯ писал СОАП-коннектор для мерлиона, но это было очень давно, сейчас могло всё поменяться. Вот кусок моей тогдашней проги, вдруг поможет:

Код: c#
1.
2.
3.
          serv = new MerlionIZ.MLPortClient();
          serv.ClientCredentials.UserName.UserName = login;
          serv.ClientCredentials.UserName.Password = pass;



Спасибо. Это первое что я написал, но сервер выдаёт ошибку (см. сообщение выше).
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39824889
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в конфиге endpoint правильно настроен? Такое ощущение, что логин и пароль не уходят. Встречал такое поведение, когда endpoint настроен на авторизацию клиентским сертификатом.
Должно быть как в примере: https://docs.microsoft.com/ru-ru/dotnet/framework/wcf/feature-details/transport-security-with-basic-authentication
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39825136
Romalti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алымов Анатолий,

По аналогии с примером, получился следующий код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

EndpointAddress ea = new EndpointAddress( @"https://apitest.merlion.com/dl/mlservice3?wsdl" );
MLPortClient merlionApiClient = new MLPortClient( myBinding, ea );

merlionApiClient.ClientCredentials.UserName.UserName = @"TC0051047|API";
merlionApiClient.ClientCredentials.UserName.Password = @"8yKP2BaWfo";
merlionApiClient.helloWorld( "TEST" );



..., выполнение которого выдаёт ошибку:
авторSystem.ServiceModel.ProtocolException: "Тип содержимого application/xml; charset="UTF-8" ответного сообщения не соответствует типу содержимого привязки (application/soap+xml; charset=utf-8). При использовании особого кодировщика необходимо правильно реализовать метод
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39825724
Romalti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бррр... . Я уже готов за деньги решать эту проблему, без шуток. Если есть желающие пишите в личку или тут...

Немного размышлений:

Вот рабочий код на PHP:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?php
$wsdl_url = "https://api.merlion.com/re/mlservice3?wsdl";
$params = array('login' => "ABC0123|MYLOGIN"
, 'password' => "LIzsldhf9"
, 'encoding' => "Windows-1251"
, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS
);
try {
$client = new SoapClient($wsdl_url, $params);
$cat = $client->getCatalog('N1');
foreach ($cat->item as $row) {
echo $row->ID_PARENT." - ".$row->ID." - ".$row->Description."<br>";
}
} catch (SoapFault $E) {
echo $E->faultstring;
}
?>


Вот мой код на C#:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.MessageEncoding = WSMessageEncoding.Text;
binding.TextEncoding = Encoding.GetEncoding( "Windows-1251" );

EndpointAddress endpoint = new EndpointAddress( wsdlUri );

MLPortClient clientMerlionAPI = new MLPortClient( binding, endpoint );
clientMerlionAPI.ClientCredentials.UserName.UserName = login;
clientMerlionAPI.ClientCredentials.UserName.Password = password;
clientMerlionAPI.Open();

var topGroup = clientMerlionAPI.getCatalog( "Order" );



В строке "binding.TextEncoding = Portable.Text.Encoding.GetEncoding( "Windows-1251" )" я пытаюсь переопределить кодировку отправляемых сообщений на "Windows-1251" - это я делаю по аналогии с примером на PHP. Но TextEncoding не хочет принимать эту кодировку и на то есть причины, данное свойство её просто напросто не поддерживает, поддерживаются только:
Код: c#
1.
internal static readonly Encoding[] SupportedEncodings = new Encoding[] { Encoding.UTF8, Encoding.Unicode, Encoding.BigEndianUnicode };


Если же использовать кодировку UTF-8, то на последней строке "var topGroup = clientMerlionAPI.getCatalog( "Order" )", возникает ошибка:
авторSystem.ServiceModel.ProtocolException: "Тип содержимого application/xml; charset="UTF-8" ответного сообщения не соответствует типу содержимого привязки (application/soap+xml; charset=utf-8). При использовании особого кодировщика необходимо правильно реализовать метод
Help me please! Или меня скоро в дурку отвезут, я уже какой день ломаю голову над этой задачей...
...
Рейтинг: 0 / 0
Помогите подключится к API Merlion (WSDL, SOAP)
    #39825962
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из url уберите ?wsdl
Код: c#
1.
EndpointAddress ea = new EndpointAddress( @"https://apitest.merlion.com/dl/mlservice3" );
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Помогите подключится к API Merlion (WSDL, SOAP)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]