1С web-сервис, проблема с подключением из клиента C# WinRT #664158


#0 by manserg
При попытке подключиться из тестового клиента на C# WinRT к нормально работающему web-сервису 1С, получаю следующее сообщение: The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm="1C:Enterprise 8.2"'." Тестовый клиент создан на C# в Visual Studio 2012 из шаблона Windows Store с использованием .NET 4,5. Классы сгенерированы автоматически из WSDL через "Add Service Reference", однако теперь там нет возможности генерить Web Reference а только Service Reference. Пример кода тестового клиента:       private void BtnCompany_Click(object sender, RoutedEventArgs e)        { На форуме видел похожую тему: Там была рекомендация использовать свойство "PreAuthenticate", однако так и не смог найти данное свойство у сгененрированных Service Reference. Был бы очень признателен за предоставление реально работающего примера клиента на C# под WinRT для 1С web-сервисов!
#1 by СуперГрид
вот жесть то.... как бы винрт признали тупиковой и сняли с производства. вин8 - тоже ошибка природы.
#2 by manserg
Up - Неужели никто не сталкивался с данной проблемой?
#3 by Serginio1
Откуда такие сведения? WinRT 'nj Апи используемая как на x86 так и вин8 и Windows RT. a зачем тебе Service.ClientCredentials.HttpDigest.ClientCredential.UserName = "web";            Service.ClientCredentials.HttpDigest.ClientCredential.Password = "12345"; Авторизоция нужна для входа в 1С
#4 by manserg
Service.ClientCredentials.HttpDigest.ClientCredential.Password = "12345"; Были использованы от безисходности решения проблемы аутентификации. Судя по всему Service Reference генерируемый автоматом в VS2012 невозможно заставить использовать PreAuthenticate параметр, по крайней мере мне этого не удалось. Проблема именно в том, что по умолчанию 1С web-service производит авторизацию по данным заголовка SOAP запроса а уже потом на уровне сервиса. В общем эксперименты продолжаются, но надежды заставить нормально работать Service Reference тают на глазах...
#5 by manserg
Не хотел даже отвечать на подобные высказывания, но решил все же развеять подобные мнения - MS Windows 8 весьма современное и перспективное решение, это признано многими уважаемыми аналитиками. А "ограничения" WinRT в основном в головах пользователей т.к. большинство привыкли к x86 Windows. То что WinRT будет только развиваться говорят хотябы официально озвученные планы многих уважаемых вендоров, которые уже заявили о скором выпуске множества устройств на WinRT. Да и приведенная ссылка подтверждает, что эра WP8 только на подходе. В любом случае, как говорится: поживем - увидим...
#6 by manserg
п в посте читать, как п
#7 by Serginio1
Лучше тебе такие вопросы задавать на спец форумах. RSDN или stackoverflow.com Нужно смотреть это свойство у транспорта
#8 by Serginio1
посмотри
#9 by Serginio1
#10 by manserg
Уже перечитал массу статей на stackoverflow.com, кое-что нарыл, проверяю... Все бы ничего, да только WebRequest это не одно и тоже что Service Reference, более того, в WinRT используется .NET 4,5 а в нем много изменений и отличий от прежних frameworks. аналогично, но за пример спасибо. А вот это уже интересно, буду пробовать. Спасибо за участие, Serginio1!
#11 by Serginio1
Сам изучаю WCF и самому интересно. Там подключение может использовать разные биндинги
#12 by AaNnDdRrEeYy
У меня такое было, я вот так решил
#13 by Serginio1
Он кстати тебя там спрашивал web-service развернут в Apache. Где и как устанавливать параметр PreAuthenticate?
#14 by AaNnDdRrEeYy
TestWS - это прокси сервиса в 1с using (TestWS vs = new TestWS)            {
#15 by AaNnDdRrEeYy
только сейчас заметил что комуто это всетаки надо было
#16 by Serginio1
Посмотри еще
#17 by AaNnDdRrEeYy
то что по первой ссылке можно тупо в app.config прописать, обычно оно само автоматом прописывается при импорте ссылки на сервис.
#18 by Serginio1
Да смотрю я на WCF там все в основном через конфиг делается. Но видишь ошибку unauthorized with client authentication scheme 'Anonymous' А ему нужен Basic
#19 by manserg
Так речь о Web Service Reference или Service Reference? У меня как раз Service Reference можно только в WinRT сгенерить и соответственно у меня в сгенерированном proxy отсутсвует свойство PreAuthenticate
#20 by manserg
Спасибо, проверю эти варианты, отпишусь тогда по результату. Пока удалось победить ошибку только используя HttpClient и в через HttpClientHandler установив PreAuthenticate = true; и Credentials = new NetworkCredential("web", "12345"); получить отсутсвие ошибки и нормальное завершение запроса. Теперь осталось разобраться с парсингом получаемых данных... Но конечно лучше все было бы реализовать через Service Reference как готовые классы.
#21 by manserg
Есть предположение, что в сгенерированном файле Reference.svcmap необходимо произвести соответствующие настройки, но вот разобраться какие и как их настроить пока не удалось. На всякий случай пример этого файла:
#22 by Serginio1
Ну у тебя уже есть сгенеренные Сериализаторы. Так что самостоятельно парсингом заниматься не надо. Нужно разобраться Service Reference
#23 by Serginio1
Все там решают через Биндинг например WSHttpBinding myBinding = new WSHttpBinding;
#24 by Serginio1
Сейчас ради интереса создал приложение с ServiceReference Там создался AppConfig с такой веткой, но без ветки создались конструкторы с параметрами public ИмяСервисаPortTypeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :                base(binding, remoteAddress) {        }
#25 by Serginio1
Если открыть через Edit WCF Configuration раскрыть ветку Bindings будет ветка ИмяСервисаBinding Там вкладочка Security и ветка TransportSecurity Properties В свойстве transport clientCredentialType нужно установить Basic а вот realm наверное из твоего предупреждения или опустить
#26 by manserg
Спасибо конечно за развернутый пример, однако у меня в приложении на базе шаблона Windows Store нет AppConfig файла. Подозреваю должна быть ему альтернатива...
#27 by manserg
Да, в сервисах созданных на C#, похоже нет пролем с подключением, однако проблемы наблюдаются при подключении к сервисам 1С. Например 1С web-service генерит wsdl с методами версий soap 1.1 и 1.2, так вот пока приложения под WinRT при генерации Service Reference четко говорят, что не поддерживается формат версии soap 1.2 т.ч. пришлось вручную исключать из wsdl блоки версии 1.2 В приложении под WinRT вообще много изменено относительно привычного строения приложения под Windows x86.
#28 by manserg
Биндинг корректный при генерации Service Reference, т.ч. особого смысла не вижу его генерить вручную. Логин и пароль указал, но результат мною уже озвучен в первом посте. От безысходности попробую пожалуй полностью вручную прописать биндинг вдруг действительно поможет...
#29 by manserg
Прости - вообще не понял что и где открыть. У меня в приложении есть любопытный файл "ServiceReferences.Designer.ClientConfig" со следующим содержимым: Быть может в нем нужно что то прописывать?
#30 by manserg
Вот еще любопытный файл "configuration.svcinfo" в разделе сгенерированного Service Reference со следующим содержимым: Может в нем все прописывается?
#31 by Serginio1
Посмотри Кстати а какие конфигурационные файлы в Solution Explorer? Типа Там больше нет файла app.config в WinRT так конфигурации должно быть сделано в коде. Для SimpleApp это делается в App.xaml.cs - OnLainched событие в коде. protected override void OnLaunched(LaunchActivatedEventArgs args)    {
#32 by Serginio1
Биндинг нормальный но ему нужно указать SecurityMode WSHttpBinding myBinding = new WSHttpBinding; restcoachPortTypeClient Service =   new restcoachPortTypeClient(myBinding, ea);
#33 by manserg
Спасибо за идею, заработал клиент со следующим кодом:            restcoachPortTypeClient Service = new restcoachPortTypeClient(myBinding, ea); Всем еще раз спасибо за участие!
#34 by Serginio1
Вообще для справки [url= - класс[/url] [q] S>Представляет привязку с возможностью взаимодействия, поддерживающую распределенные транзакции и [b]безопасные надежные сеансы[/b]. [/q] WSHttpBindingBase.ReliableSession - свойство типа [url=
#35 by Serginio1
Короче есть Класс WSHttpBinding Представляет привязку с возможностью взаимодействия, поддерживающую распределенные транзакции и безопасные надежные сеансы. WSHttpBindingBase.ReliableSession - свойство типа OptionalReliableSession
#36 by manserg
Да то понятно, что есть, да вот в .NET 4.5 for WinRT его я не нашел и пришлось использовать BasicHttpBinding. Вот статья с описание различий между WsHttpBinding и BasicHttpBinding: И судя по всему мало того, что в WinRT пока поддерживается только SOAP 1.1, так еще думаю на стороне 1С скорей всего пока не поддерживаются никакие шифрования заявленные в WsHttpBinding.
#37 by Serginio1
Говорят с выходом Windows 8.1 многое изменится. В 8.3 обещаяют Реализована поддержка защищённого соединения SSL и сертификатов во всех механизмах платформы, использующих Интернет: Тонкий клиент (как для Windows, так и для Linux), Web-сервисы 1С:Предприятия, Объекты встроенного языка, реализующие работу по протоколам FTP и HTTP, Интернет-почта. Могут использоваться сертификаты из стандартного хранилища операционной системы или из файла. Настроить использование сертификатов можно через командную строку или в диалоге параметров запуска информационной базы.
#38 by Serginio1
37+
#39 by manserg
Да, ожидаю с нетерпением изменений к лучшему, т.к. текущая реализация WinRT оставляет жалать лучшего. И продакшн 1С 8.3 тоже очень ждемс... Но делать то нужно сейчас, т.ч. извращаемся и делаем на том, что есть.
Тэги: Мобильный мир
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С