Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > ASP.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2019, 12:57   #1
romalti
Новичок
Джуниор
 
Регистрация: 12.06.2019
Сообщений: 1
По умолчанию Подключение к API Merlion (WSDL, SOAP)

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

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

Собственно проблема у меня с подключением к сервису. Что я делаю:
  • Создаю пустой проект.
  • Добавляю ссылку на службу (WSDL). После добавлении ссылки на службу автоматически создаются классы для работы с сервисом.
  • Один из классов называется MLPortClient он наследуется от класса System.ServiceModel.ClientBase.
Немного размышлений:

Вот рабочий код на PHP:
Код:
<?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#:
Код:
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 не хочет принимать эту кодировку и на то есть причины, данное свойство её просто напросто не поддерживает, поддерживаются только:
Код:
internal static readonly Encoding[] SupportedEncodings = new Encoding[] { Encoding.UTF8, Encoding.Unicode, Encoding.BigEndianUnicode };
Если же использовать кодировку UTF-8, то на последней строке "var topGroup = clientMerlionAPI.getCatalog( "Order" )", возникает ошибка: автор
Цитата:
System.ServiceModel.ProtocolExcepti on: "Тип содержимого application/xml; charset="UTF-8" ответного сообщения не соответствует типу содержимого привязки (application/soap+xml; charset=utf-8). При использовании особого кодировщика необходимо правильно реализовать метод
Help me please! Или меня скоро в дурку отвезут, я уже какой день ломаю голову над этой задачей...
romalti вне форума Ответить с цитированием
Старый 12.06.2019, 20:59   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от romalti Посмотреть сообщение
По работе надо протестировать работу по API с поставщиком Merlion (дистрибьютор).
Вы уже протестировали. Не работает.

А, если серьёзно, у Вас Content-type того, что приходит, не соответствует тому, что ожидает C#.

Здесь либо "танцы с бубном" вокруг конфига (один из возможных вариантов решения можно посмотреть тут), либо (если не поможет) обращаться в техподдержку API и сказать, что есть такая-то проблема при работе с их API через C#.
Streletz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SOAP WSDL и Авторизация Ko$ PHP 3 05.12.2018 17:52
Веб-сервис SOAP на PHP, WSDL MonyaVitevna PHP 2 21.03.2017 15:21
WSDL и SOAP, Отправка запросов к удаленному серверу. Алориан PHP 2 22.06.2009 12:57
soap wsdl nimf Общие вопросы Delphi 0 22.08.2008 16:10
Помогите разобраться со связкой PHP+SOAP+WSDL bobadd PHP 9 03.11.2007 12:58