Ошибка 401 http сервис 1с

   yurii-syrkin

22.04.20 — 17:50

Здравствуйте. Необходимо связать базу 1С и сайт на python. В 1С создал http сервис. Он работает, в браузере могу зайти по адресу, появляется информация в json формате, всё норм. Но вот из python ни как не могу подключиться к этому сервису, выдаётся ошибка 401. http сервис развернул на веб сервере IIS 10. Вот код:

from urllib import request

from requests.auth import HTTPBasicAuth

import requests

myUrl = ‘http://localhost/Uchet_Chasov/hs/DataExchange’

res = requests.get(myUrl, headers= {‘Authorization’: ‘Basic’}, auth=HTTPBasicAuth(‘логин’, ‘пароль’))

Какие бы логин с паролем я не передавал (и от ОС windows, и пользователь 1С) всё равно в res ошибка 401. Уже два дня бьюсь, ни чего не помогает. Если кто сталкивался, подскажите как быть. Спасибо.

   quest

1 — 22.04.20 — 18:05

могу ошибится, но по моему у питонанадо явно указыать юникод в строках

auth=HTTPBasicAuth(u’логин’, u‘пароль’)

но могу ошибаться

   такт

2 — 22.04.20 — 18:14

а если авторизацию в vrd — подключается ?

   yurii-syrkin

3 — 22.04.20 — 18:15

(1) Нет, не помогло

   yurii-syrkin

4 — 22.04.20 — 18:16

(2) А это как? Не совсем понял. Я честно говоря так и не понял, чьи учетные данные необходимо указывать пользователя 1С или виндовые?

   такт

5 — 22.04.20 — 18:20

(4) в файле vrd в строке сервера и базы добавляешь ;;Usr=хххх;Password=хххх;

   такт

6 — 22.04.20 — 18:24

+5 Password на Pwd

   yurii-syrkin

7 — 22.04.20 — 18:26

Вот так да? ib=»Srvr="Tyson";Ref="Uchet_Chasov";Usr=sa;Password=12345;»

   yurii-syrkin

8 — 22.04.20 — 18:27

Всё равно не получается. 401 хоть убейся

   такт

9 — 22.04.20 — 18:27

   такт

10 — 22.04.20 — 18:39

(9) если не поможет можно посмотреть CORS policy

   yurii-syrkin

11 — 22.04.20 — 18:47

Вот я как раз вникаю и пробую. А CORS policy что такое?

   bolero

12 — 22.04.20 — 18:48

(0) > headers= {‘Authorization’: ‘Basic’}

а кто тебе сказал так делать, дополнительно еще заголовок кидать? возможно, IIS ругается на то, что ты два раза его шлешь

у меня так УМВР:

s = requests.Session()
s.auth = (conf.odata_username, conf.odata_password)
ret = s.get(url)

(10) (11) не, CORS тут не виноват

   yurii-syrkin

13 — 22.04.20 — 18:55

(12) Да я и с заголовками пробовал и без и с картежем и через auth=HTTPBasicAuth(. Сейчас попробовал как вы посоветовали через s = requests.Session(), всё равно не помогает

   Serginio1

14 — 22.04.20 — 19:17

   Garykom

15 — 22.04.20 — 20:22

myUrl = ‘http://localhost/Uchet_Chasov/hs/DataExchange’

res = requests.get(myUrl, auth=(‘username’, ‘password’)

   yurii-syrkin

16 — 22.04.20 — 20:54

(14) Нет, на английском языке всё и логин и пароль

   Вафель

17 — 22.04.20 — 20:56

Cors это вообще только для браузера инструкция

   yurii-syrkin

18 — 22.04.20 — 21:01

В заголовке ответа вот такая хрень приходит {‘Cache-Control’: ‘private’, ‘Content-Type’: ‘text/html; charset=utf-8’, ‘Server’: ‘Microsoft-IIS/10.0’, ‘WWW-Authenticate’: ‘Basic realm=»1C:Enterprise 8.3″, Negotiate, NTLM, Basic realm=»localhost»‘, ‘Date’: ‘Wed, 22 Apr 2020 17:58:35 GMT’, ‘Content-Length’: ‘6294’}

   yurii-syrkin

19 — 22.04.20 — 21:01

То есть получается python всё таки достукивается до сервиса?

   yurii-syrkin

20 — 22.04.20 — 21:06

Вот такой вот ответ невнятный:

strict_ns_set_initial_dollar:False

strict_ns_set_path:False

strict_ns_unverifiable:False

strict_rfc2965_unverifiable:True

_allowed_domains:None

_blocked_domains:()

_now:1587578615

status_code:401

text:'<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>; n<html xmlns=»http://www.w3.org/1999/xhtml»>; n<head> n<title>Подробные данные об ошибке IIS 10.0 — 401.5 — Unauthorized</title> n<style type=»text/css»> n<!— nbody{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;} ncode{margin:0;color:#006600;font-size:1.1em;font-weight:bold;} n.config_source code{font-size:.8em;color:#000000;} npre{margin:0;font-size:1.4em;word-wrap:break-word;} nul,ol{margin:10px 0 10px 5px;} nul.first,ol.first{margin-top:5px;} nfieldset{padding:0 15px 10px 15px;word-break:break-all;} n.summary-container fieldset{padding-bottom:5px;margin-top:4px;} nlegend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;} nlegend{color:#333333;;margin:4px 0 8px -12px;_margin-top:0px; nfont-weight:bold;font-size:1em;} na:link,a:visited{color:#007EFF;font-weight:bold;} na:hover{text-decoration:none;} nh1{font-size:2.4em;margin:0;color:#FFF;} nh2{…

url:’http://localhost/Uchet_Chasov/hs/DataExchange’

_content:b'<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>; n<html xmlns=»http://www.w3.org/1999/xhtml»>; n<head> n<title>xd0x9fxd0xbexd0xb4xd1x80xd0xbexd0xb1xd0xbdxd1x8bxd0xb5 xd0xb4xd0xb0xd0xbdxd0xbdxd1x8bxd0xb5 xd0xbexd0xb1 xd0xbexd1x88xd0xb8xd0xb1xd0xbaxd0xb5 IIS 10.0 xe2x80x94 401.5 xe2x80x94 Unauthorized</title> n<style type=»text/css»> n<!— nbody{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;} ncode{margin:0;color:#006600;font-size:1.1em;font-weight:bold;} n.config_source code{font-size:.8em;color:#000000;} npre{margin:0;font-size:1.4em;word-wrap:break-word;} nul,ol{margin:10px 0 10px 5px;} nul.first,ol.first{margin-top:5px;} nfieldset{padding:0 15px 10px 15px;word-break:break-all;} n.summary-container fieldset{padding-bottom:5px;margin-top:4px;} nlegend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;} nlegend{color:#333333;;margin:4px 0 8px -12px;_…

_content_consumed:True

_next:None

   yurii-syrkin

21 — 22.04.20 — 21:20

В IIS на уровне сайта в разделе проверка пользователя включена только Анонимная проверка пользователя и Обычная проверка пользователя. Может там ещё что то надо включить?

   Сияющий в темноте

22 — 23.04.20 — 00:20

а почему бы не собрать авторизацию вручную через перевод строки в utf8,а потом в base64 у меня в javascript так рмботало прекрасно.

и еще,если у сервиса включен режим повторного использования (то есть use или auto),то он хочет команду начала сессии увидеть в заголовке или команду продолжения-если ее нет,то и будет 401

   yurii-syrkin

23 — 24.04.20 — 18:34

Попробовал вот так:

respons = requests.get(myUrl, auth =(‘login’.encode(‘utf-8’), ‘password’.encode(‘utf-8’)))

status_code = respons.status_code

print(status_code)

При этом и так уже логин с паролем на английском языке. Всё равно ошибка 401. Вот что странно, когда я указываю логин и пароль админа Windows я получаю ошибку 401.5, а когда я указываю логин и пароль пользователя 1С, получаю ошибку 401.1. Само собой в файле default.vrd тоже пробовал указывать и те и те учетные данные.

   yurii-syrkin

24 — 24.04.20 — 18:47

Вот кусок лога IIS 10

#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken

2020-04-23 20:49:44 ::1 GET /Uchet_Chasov/hs/DataExchange — 80 Tysonsa ::1 python-requests/2.23.0 — 401 5 0 8

2020-04-23 20:49:44 ::1 GET /Uchet_Chasov/hs/DataExchange — 80 Tyson/sa ::1 python-requests/2.23.0 — 401 5 0 8

2020-04-23 20:49:44 ::1 GET /Uchet_Chasov/hs/DataExchange — 80 Yurii ::1 python-requests/2.23.0 — 401 1 1326 2

   Cyberhawk

25 — 24.04.20 — 20:17

IIS поднастрой

   yurii-syrkin

26 — 24.04.20 — 21:11

(25) Да я уже понял, всё к этому ведёт. Вот сижу читаю документацию на Microsoft. Не подскажешь на что более пристальное внимание обратить?

   acht

27 — 24.04.20 — 22:25

(26) Оставь на иисе только анонимную авторизацию, чтобы он пробрасывал авторизацию в 1С. После этого или прибей гвоздями пользователя в vrd, или передавай басик авторизацию пользователя 1С. В какой кодировке — не помню, оставь логин/пароль латиницей.

   Сияющий в темноте

28 — 24.04.20 — 22:44

попробуйте написать запрос в javascript через xmlhttprequest, и только когда он заработает,переходите на питон.

авторизация собирается через base64 и вставляется как поле заголовка.

   yurii-syrkin

29 — 24.04.20 — 22:58

В общем, расковырял IIS, оставил только обычную аутентификацию, то бишь Basic и теперь вместо 401 ошибки выходит 404.0. Уф, день прошёл не зря)

   Сияющий в темноте

30 — 24.04.20 — 23:00

setRequestHeader(‘Authorization’,’Basic ‘+StringToBase64(User+’:’+Password))

setRequestHeader(‘IBSession’,’start’)

   Сияющий в темноте

31 — 24.04.20 — 23:01

этотв заголовки запроса,и должно взлететь.

   yurii-syrkin

32 — 24.04.20 — 23:24

Да тут уже или в публикации дело или в сайте, потому что сейчас даже через браузер не могу увидеть свой json. А раньше мог

   Serginio1

33 — 24.04.20 — 23:42

Самое простое это сделать запрос из 1С и посмотреть через фиддлер что уходит  или  используя postman https://software-testing.ru/library/testing/testing-tools/2638-postman

Если ты не можешь подклюючиться используя в vrd Usr=sa;Password=12345;» то явно проблема не с авторизацией

   Fragster

34 — 24.04.20 — 23:59

простейший способ — сделать юзера с именем и паролем английскими буквами

   Fragster

35 — 25.04.20 — 00:03

а вообще — на js для русскоязычных  логинов и паролей прокатывает так:

    let res = await axios.get(uri, {

      auth: {

        username: unescape(encodeURIComponent(username)),

        password: unescape(encodeURIComponent(password))

      }

, при том, что для англоязычных можно прям как есть посылать.

   novichok79

36 — 25.04.20 — 01:15

попробовать через postman или попробовать поднять apache и проверить там.

   yurii-syrkin

37 — 25.04.20 — 17:16

Переустановил IIS, переопубликовал сервис. Теперь снова ошибка 401.5 (По URL-адресу, куда надо попасть, установлено приложение ISAPI или CGI, выполняющее проверку учетных данных пользователя до начала обработки данных. Данное приложение не может проверить ваши учетные данные). Поставил postman, попробовал там сделать это запрос, ответ тот же. Честно говоря не очень вообще врубился зачем этот CGI вообще мне нужен. Я его даже не выбрал в установке. А в разделе Ограничения ISAPI и CGI у IIS вообще всё удалил. К вопросу о том на кирилице ли у меня пароль с логином. Нет, всё на латинице и пароль и логин и в 1С и в Windows.

   Cyberhawk

38 — 25.04.20 — 18:39

(26) Для начала — отключить в пуле управляемый код

   yurii-syrkin

39 — 25.04.20 — 22:47

Всем огромное спасибо, братва! Очередной раз переустановил IIS без всяких способов аутентификации. Настроил обработчики, MIME типы, анонимную проверку подлинности. В итоге в браузер захожу на http сервис, запрашивает авторизацию 1С-овской учётки, показывает json. И в python тоже возвращает 200-й код всеми способами и через (requests.get(myUrl, auth =(‘Login’, ‘Password’))) и через (requests.get(myUrl, headers= {‘Authorization’: ‘Basic’}, auth =(‘Login’, ‘Password’))) и так (requests.get(myUrl, auth =(‘Login’.encode(‘utf-8’), ‘Password’.encode(‘utf-8’)))). Аллилуйя, не прошло и недели)

  

Aleksk75

40 — 21.05.20 — 15:43

Юрий, а логин-пароль пользователя 1С или Win указывали?

25.07.2022, 13:21. Показов 583. Ответов 7

Веб сервер IIS. 1C опубликована, и доступна снаружи, пользователи заходят нормально.Настройка через телефонии стандартный интерфейс Облачной телефонии. Подключение к АТС Ростелеком проходит
нормально, исходящие идут, а вот когда АТС пытается подключится к 1С чтобы передать входящий вызов, то идет ошибка 401.5.
Ключи в 1С указаны правильно.В логах 1с вызов есть, но пользователь неизвестен. подскажите где может быть ошибка?
Вот что происходит на стороне 1С во время запроса

04:55.126001-0,CONN,1,process=w3wp,OSThread=9940,Txt=’addrBelon gsToThisComputer2, address=SERVER2008, result=true’
04:55.126002-0,CONN,1,process=w3wp,OSThread=9940,ClientID=3,Pro tected=0,Txt=’Connected, client=(23)[::1]:52528, server=(23)[::1]:1541, marker=1′
04:55.126003-0,CONN,1,process=w3wp,OSThread=9940,Txt=’Ping direction opened: address=[::1]:1541,pingTimeout=15000,pingPeriod=3000,lastSentTs =1183846830,lastReceivedTs=1183846830,lastReceived TestTs=,directionID=e762e333-5caa-443f-a8c6-4192b1443958′
04:55.126004-0,CONN,1,process=w3wp,OSThread=9940,Txt=’Connectio n added to ping direction: address=[::1]:1541,pingTimeout=15000,pingPeriod=3000,lastSentTs =1183846830,lastReceivedTs=1183846830,lastReceived TestTs=,clientID=3′
04:55.126005-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: MyUserName1: NT AUTHORITYIUSR
04:55.126007-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=3,In terface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0, CallID=857,MName=createRemoteInstance,DstClientID= 0
04:55.126008-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: DstUserName1: SERVER2008USR1CV8 StartProtocol: 0 Success
04:55.126010-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=3,In terface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0, CallID=858,MName=createRemoteInstance,DstClientID= 0
04:55.126011-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: MyUserName2:
04:55.126013-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=3,In terface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0, CallID=859,MName=createRemoteInstance,DstClientID= 0
04:55.126015-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=3,In terface=73b7d3a3-fe0b-4fdf-ba70-b74b3589ffc3,IName=ISelectSrvrProcess,CallID=860,M Name=methodsCount,DstClientID=13853
04:55.126017-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=3,In terface=73b7d3a3-fe0b-4fdf-ba70-b74b3589ffc3,IName=ISelectSrvrProcess,Method=0,Cal lID=861,MName=selectProcess,DstClientID=13853
04:55.126019-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=3,Ca llID=862,MName=Release,DstClientID=13853
04:55.126020-0,CONN,1,process=w3wp,OSThread=9940,Txt=’Connectio n removed from ping direction: address=[::1]:1541,pingTimeout=15000,pingPeriod=3000,lastSentTs =1183846830,lastReceivedTs=1183846830,lastReceived TestTs=,clientID=3′
04:55.126021-0,CONN,1,process=w3wp,OSThread=9940,Txt=’Ping direction closed: address=[::1]:1541,pingTimeout=15000,pingPeriod=3000,lastSentTs =1183846830,lastReceivedTs=1183846830,lastReceived TestTs=’
04:55.126022-22,CONN,0,process=w3wp,OSThread=9940,ClientID=3,Tx t=Outgoing connection closed
04:55.126024-0,CONN,1,process=w3wp,OSThread=9940,ClientID=4,Pro tected=0,Txt=’Connected, client=(23)[::1]:52529, server=(23)[::1]:1560, marker=1′
04:55.126025-0,CONN,1,process=w3wp,OSThread=9940,Txt=’Ping direction opened: address=[::1]:1560,pingTimeout=15000,pingPeriod=3000,lastSentTs =1183846830,lastReceivedTs=1183846830,lastReceived TestTs=,directionID=e762e333-5caa-443f-a8c6-4192b1443958′
04:55.126026-0,CONN,1,process=w3wp,OSThread=9940,Txt=’Connectio n added to ping direction: address=[::1]:1560,pingTimeout=15000,pingPeriod=3000,lastSentTs =1183846830,lastReceivedTs=1183846830,lastReceived TestTs=,clientID=4′
04:55.126027-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: MyUserName1: NT AUTHORITYIUSR
04:55.126029-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=4,In terface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0, CallID=863,MName=createRemoteInstance,DstClientID= 0
04:55.141000-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: DstUserName1: SERVER2008USR1CV8 StartProtocol: 0 Success
04:55.141002-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=4,In terface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0, CallID=864,MName=createRemoteInstance,DstClientID= 0
04:55.141003-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: MyUserName2:
04:55.141005-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=4,In terface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0, CallID=865,MName=createRemoteInstance,DstClientID= 0
04:55.141007-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=4,In terface=bc15bd01-10bf-413c-a856-ddc907fcd123,IName=IVResourceRemoteConnection,Call ID=866,MName=methodsCount,DstClientID=12778
04:55.141008-0,CONN,0,process=w3wp,OSThread=13388,Txt=’Ping direction statistics: address=[::1]:1560,pingTimeout=15000,pingPeriod=3000,period=904 8,packetsSent=3,avgResponseTime=0,maxResponseTime= 0,packetsTimedOut=0,packetsLost=0,packetsLostAndFo und=0′
04:55.141009-0,VRSREQUEST,1,process=w3wp,OSThread=9940,Method=P OST,URI=/hs/telephony/rt/call_events,Headers=’Accept-Encoding: gzip,deflate
Connection: Keep-Alive
X-Client-Sign: 14dda9f1bd1cac43a734fae0e03a41dd8c19a5f5cb780d9b75 bd32faf729ac17
X-Client-ID: 92FA971B10DD441672B03749D2FA352A
Host: 1.1.1.1
Content-Type: application/json; charset=utf-8
Content-Length: 220
1C-ApplicationName: WebClient
X-Radix-Process-ID: 008dabf6-79d8-4142-b210-e330c044d368
1C-OriginalLocation: https://1.1.1.1/unf/hs/telephony/rt/call_events/
1C-openIDLifetime: 43200
User-Agent: Apache-HttpClient/4.5.8 (Java/1.8.0_202)
1C-ConnectString: Srvr=SERVER2008;Ref=unf;ws=https://1.1.1.1/unf
1C-BaseLocation: https://1.1.1.1/unf
1C-WebLocale:
X-Forwarded-For: 95.167.42.110
1C-openIDProviderEndpoint: https://192.168.1.60:443/unf/e1cib/oid2op
1C-openIDAllowedReturnTo: Lio=;
1C-authorizationConfig: ezAsIiIsMH0%3D
1C-servicesPublicationSource: vrd
1C-servicesReuseSeances: %2Funf,hs%2FTelephonyApi,2,20,5,10′,Body=220
04:55.141010-0,CONN,0,process=w3wp,OSThread=9940,Txt=’Ping direction statistics: address=[::1]:1541,pingTimeout=15000,pingPeriod=3000,period=0,p acketsSent=0,avgResponseTime=0,maxResponseTime=0,p acketsTimedOut=0,packetsLost=0,packetsLostAndFound =0′
04:56.031001-889990,SCALL,1,process=w3wp,OSThread=9940,ClientID =4,Interface=bc15bd01-10bf-413c-a856-ddc907fcd123,IName=IVResourceRemoteConnection,Meth od=0,CallID=867,MName=send,DstClientID=12778
04:56.031002-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: MyUserName1: NT AUTHORITYIUSR
04:56.031004-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=4,In terface=bc15bd01-10bf-413c-a856-ddc907fcd123,IName=IVResourceRemoteConnection,Meth od=0,CallID=868,MName=send,DstClientID=12778
04:56.031005-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: DstUserName1: SERVER2008USR1CV8 StartProtocol: 0 Success
04:56.031007-1,SCALL,1,process=w3wp,OSThread=9940,ClientID=4,In terface=bc15bd01-10bf-413c-a856-ddc907fcd123,IName=IVResourceRemoteConnection,Meth od=0,CallID=869,MName=send,DstClientID=12778
04:56.031008-0,CONN,1,process=w3wp,OSThread=9940,Txt=Clnt: MyUserName2:
04:56.046000-14991,SCALL,1,process=w3wp,OSThread=9940,ClientID= 4,Interface=bc15bd01-10bf-413c-a856-ddc907fcd123,IName=IVResourceRemoteConnection,Meth od=0,CallID=870,MName=send,DstClientID=12778
04:56.046001-0,VRSRESPONSE,1,process=w3wp,OSThread=9940,Status= 401,Phrase=Unauthorized,Headers=’WWW-Authenticate: Basic realm=»1C:Enterprise 8.3″
Content-Length: 0′,Body=0
05:05.177000-0,CONN,0,process=w3wp,OSThread=13704,Txt=’Ping direction statistics: address=[::1]:1560,pingTimeout=15000,pingPeriod=3000,period=100 46,packetsSent=3,avgResponseTime=0,maxResponseTime =0,packetsTimedOut=0,packetsLost=0,packetsLostAndF ound=0′
05:15.239000-0,CONN,0,process=w3wp,OSThread=13704,Txt=’Ping direction statistics: address=[::1]:1560,pingTimeout=15000,pingPeriod=3000,period=100 62,packetsSent=3,avgResponseTime=0,maxResponseTime =0,packetsTimedOut=0,packetsLost=0,packetsLostAndF ound=0′

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Возникла необходимость взаимодействовать с 1C с мобильного клиента под Windows Phone 7/8. Самым простым способом взаимодействия показалось работа через web сервисы, поддерживаемые 1С.

С точки зрения публикации web сервиса особых сложностей нет. Шаги подробно описаны в статьях:

  • http://habrahabr.ru/post/136684/
  • http://howknow1c.ru/programmirovanie-1c/web-servisy-1s.html
  • http://infostart.ru/public/86791/
  • http://1cprogrammistu.ru/60-sozdanie-web-servisa-v-1s-predpriyatii.html
  • http://www.basic.visual2000.ru/kolesov/pcmag/2006-1c/2006-05/web_1c.htm
  • http://v8.1c.ru/overview/Term_000000286.htm
  • http://1c-dn.com/forum/forum1/topic1184/
  • http://fixin.com.ru/articles/1s_web_services/article.htm
  • http://infostart.ru/public/327963/

Проблемы возникли с доступом к опубликованному web-сервису 1С. Под IIS 7.5 из под Windows 2008R2 после полудня танцев с бубном проблему решить не удалось. Были изучены статьи и ветки форумов:

  • http://infostart.ru/public/75205/
  • http://www.forum.mista.ru/topic.php?id=568905
  • http://www.forum.mista.ru/topic.php?id=665708
  • http://www.forum.mista.ru/topic.php?id=539933
  • и т.д.

но счастье так и не наступило. 

В результате решил, что стоит попробовать поднять web сервис на Apache, поскольку с ним у меня обычно все было несколько проще с настройкой. Итак, на другом порту (8080) на том-же сервере был поднят Apache 2.2.22. В 1С был создан ещё один web сервис и опубликован уже на Apache. С настройками по умолчанию он также не заработал. Разберем ошибки.

Web сервис был опубликован в 1С под именем wsApache.

Публикация web-сервиса 1С

Публикация web-сервиса 1С под Apache

Соответственно, в указанном при публикации каталоге появился файл default.vrd следующего содержания:

В httpd.conf 1С добавила следующие строчки:

# 1c publication

LoadModule _1cws_module "C:/Program Files (x86)/1cv82/8.2.17.153/bin/wsap22.dll"

Alias "/ws" "C:/inetpub/wwwroot/ws/"

<Directory "C:/inetpub/wwwroot/ws/">

    AllowOverride All

    Options None

    Order allow,deny

    Allow from all

    SetHandler 1c-application

    ManagedApplicationDescriptor "C:/inetpub/wwwroot/ws/default.vrd"

</Directory>

В целом, файлы/изменения создаваемые 1С почти рабочие.  Теперь о проблемах.

Правильный линк на сервис

В некоторых статьях путь к web сервису указан как: http://имя_сервера:порт/имя_при_публикации/alias?wsdl.

В моем случае:

  • Имя сервера: s-1s-1-hw
  • Порт: 8080
  • Имя при публикации: wsApache
  • Alias из файла default.vrd: service.1cws

Соответственно, НЕПРАВИЛЬНАЯ ссылка на web сервис 1С такая: http://s-1c-1-hw:8080/wsApache/service.1cws?wsdl

Если использовать такой линк, то 1C 8.2 выдаст сообщение вида:

1C:Enterprise 8 application error:

HTTP: Not found Ошибка при работе с ресурсом /ws/service.1cws

Правильный вариант:

http://имя_сервера:порт/имя_при_публикации/ws/alias?wsdl.

Это обращение эквивалентно обращению по имени сервиса из default.vrd:

http://имя_сервера:порт/имя_при_публикации/ws/name?wsdl.

В моем случае:

  • Name из файла default.vrd: Service

Соответственно, ПРАВИЛЬНЫЙ линк для доступа к web сервису 1С будет такой:

http://s-1c-1-hw:8080/wsApache/ws/service.1cws?wsdl

или такой

http://s-1c-1-hw:8080/wsApache/ws/service?wsdl

Если указать ссылку с суффиксом ?wsdl, то в веб браузере отобразиться XML файл с описанием опубликованного сервиса.

Если указать ссылку без суффикса ?wsdl, то при правильной настройке должна появится страница с гиперссылкой на опубликованный сервис:

http://s-1c-1-hw:8080/wsApache/ws/Service

Авторизация пользователя при обращении к web сервису 1С

Если попытаться получить доступ к web сервису опубликованному под Apache не исправляя файл default.vrd, то появиться стандартный диалог авторизации:

Диалог авторизации на web сервисе 1С

Диалог авторизации на web сервисе 1С

В тестовой базе был заведен тестовый пользователь IUSR с полными правами с пустым паролем. Если ввести в диалог в качестве логина этого пользователя, то авторизация пройдет успешно и отобразиться либо XML файл, либо ссылка на него (см. выше).

Можно исключить запрос авторизационной информации вбив логин и пароль прямо в файл default.vrd, что, конечно, не рекомендуется с точки зрения безопасности, но иногда необходимо.

Это все. В моем случае каких-то дополнительных правок конфиг файлов не потребовалось.

В некоторых статьях указывалось, что нужно убрать из httpd.conf опцию «Options None«. У меня работает в обоих вариантах, т.е. когда строка присутствует и когда она удалена.

Публикация web сервиса 1С на IIS 7.5

Как уже упоминал выше, с публикацией web сервиса на IIS 7.5 с первого раза у меня не задалось, хотя тонкий клиент запускается без проблем. Поскольку пароль в конфигурационном файле по соображениям безопасности меня не устраивал, вернулся к вопросу настройки IIS.  Был опубликован web сервис с именем wsIIS и именем сервиса ServiceIIS и alias-ом serviceIIS.1cws. Галка в чекбоксе «Использовать аутентификацию операционной системы на веб-сервере» для простоты эксперимента была снята.

Публикация web сервиса 1С в IIS 7.5.

Публикация web сервиса 1С в IIS 7.5.

Корректная ссылка в моем случае: http://s-1c-1-hw/wsIIS/ws/ServiceIIS?wsdl. При попытке зайти из Chrome/IE получаем ошибку возвращенную IIS:

Ошибка HTTP 401.2 — Unauthorized

дабы избавиться от ошибки правим web.config сформированный 1С следующим образом:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <system.webServer>

        <handlers>

            <add name="1C Web-service Extension" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:Program Files (x86)1cv82binwsisapi.dll" resourceType="Unspecified" requireAccess="None" />

        </handlers>

        <security>

            <authorization>

                <add accessType="Allow" users="*" />

            </authorization>

        </security>

    </system.webServer>

</configuration>

Эта правка эквивалента изменению через консоль управления IIS для нашего опубликованного приложения с именем wsIIS  правил авторизации пользователя.

Настройки IIS 7.5 для доступа к web сервисам 1C

Настройки IIS 7.5 для доступа к web сервисам 1C

Добавление тегов security в web.config или правка правил авторизации в консоли IIS приводит к тому, что при обращении к сервису по указанной выше ссылке появляется запрос на авторизацию. Вводим нашего тестового пользователя IUSR без пароля и получаем нужный XML файл в ответе сервера.

Прописав в default.vrd логин и пароль пользователя, как было указано выше для Apache, уберем окно авторизации и сервис будет всегда авторизовываться под указанным пользователем. Как проходит авторизация можно посмотреть в логах 1C. Но вариант с прописыванием пользователя в конфигурационный файл — не наш путь, ибо не секьюрно.

Изменим настройки авторизации пользователя (в IIS проверка подлинности), чтобы использовалась Windows авторизация. Сменить можно в консоли управления IIS, либо в конфигурационном  файле. Мне больше нравиться конфигурационный файл. так как проще переносить настройки при миграции на другой сервер.

Поскольку изменения секции web.config <authentication> заблокированы на уровне IIS в файле

%windir%system32inetsrvconfigapplicationHost.config

нужно зайти туда и сменить «Deny» на «Allow» для секции «authentication»:

<sectionGroup name="authentication">

    <section name="anonymousAuthentication" overrideModeDefault="Allow" />

    <section name="basicAuthentication" overrideModeDefault="Allow" />

    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />

    <section name="digestAuthentication" overrideModeDefault="Deny" />

    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />

    <section name="windowsAuthentication" overrideModeDefault="Allow" />

</sectionGroup>

после чего РАБОЧИЙ web.config для опубликованного web сервиса 1С будет выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <system.webServer>

        <handlers>

            <add name="1C Web-service Extension" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:Program Files (x86)1cv82binwsisapi.dll" resourceType="Unspecified" requireAccess="None" />

        </handlers>

        <security>

            <authorization>

                <add accessType="Allow" users="*" />

            </authorization>

         <authentication>

            <windowsAuthentication enabled="true" useKernelMode="true">

                    <providers>

                        <clear />

                        <add value="Negotiate" />

                        <add value="NTLM" />

                  </providers>

                    <extendedProtection tokenChecking="Allow" />

            </windowsAuthentication>

            <basicAuthentication enabled="false" />

            <anonymousAuthentication enabled="false" />

         </authentication>

        </security>

    </system.webServer>

</configuration>

Эквивалент последней выполненной операции (настройка <authentication>) — публикация сервиса с включенной галкой в чекбоксе «Использовать аутентификацию операционной системы на веб-сервере». 1С при публикации меняет эту настройку не в web.config, а в настройках IIS через API. В любом случае изменения должны быть видны в консоли управления IIS:

Настройка аутентификации при публикации web сервиса 1С в IIS

Настройка аутентификации при публикации web сервиса 1С в IIS

На всякий случай для проверки настроек при публикации web сервиса имеет смысл в консоли управления IIS зайти в следующие разделы:

Публикация web сервиса 1С в IIS. Настройка через консоль.

Публикация web сервиса 1С в IIS. Настройка через консоль.

После указанной выше настройки web.config, удаляем жестко прописанные логин и пароль из  файла default.vrd. На всякий случай перегружаем IIS. Если для доменных пользователей прописаны корректные соответствия в учетных записях 1С, то авторизация пройдет прозрачно под доменными учетными записями, в чем можно будет убедиться посмотрев в логах авторизации 1С. 

Здесь приводится ряд ошибок IIS (и способы их устранения) которые с высокой вероятностью могут возникнуть при публикации web сервиса 1С на IIS.

Доступ из Visual Studio 2012

Как подробно описано в статье на хабре, чтобы добавить ссылку на опубликованный web сервис 1С в Visual Studio для разработки клиента необходимо создать приложение (например, консольное), кликнуть правой кнопкой мышки на solution и выбрать пункт «Add Service Reference…». Следует обратить внимание на точное указание ссылки непосредственно на WSDL описание, т.е. без указания суффикса ?wsdl Visual Studio ничего не обнаружит.

Добавление reference к web службе 1С из Visual Stiudio.

Добавление reference к web службе 1С из Visual Stiudio.

Далее разрабатываем обычный клиент для web сервиса.

Удачи!!!

РЕШЕНИЕ

При данной ошибке нам нужно проверить работоспособность . 

  1. Заходим на 10.2.145.17 и вставляем ссылку в браузер http://haproxy.miac.lan:82/hospital_okb2/hs/venul/referenceInformation/patients?patientID=3856186 (вместо hospital_okb2 можно писать любую базу. а пациент нам в данном случае не важен мы проверяем что сервис отвечает, а не правильность данных)
    тут неважно какие данные пациента , если выдало структуру с  { как на скрине , то сервис нам отвечает.  

    2. Если выдало
    access denied 401 , то значит что-то с учетной записью web_Venul 

В программе AllegroCount он-лайн обмен между приложением на устройстве (терминал сбора данных, телефон, планшет) и 1С происходит благодаря типовому функционалу — «Публикация HTTP сервисов расширений по умолчанию».

Настройка начального запуска описана на странице программы и в разделе Установка программы AllegroCount.

Для точного выявления ошибок рекомендуем использовать Эмулятор ТСД, который можно скачать на странице программы.

Типовая ошибка на экране терминала при неверно выполненной публикации на этапе ввода кода сотрудника может выглядеть следующим образом:

Ошибки при настройке AllegroCount

Java.io.FileNotFoundException: http://адрес_сервера/ИМЯ БАЗЫ/hs/ServiceAllegro/update

Ошибки такого плана говорят о не верно настроенной публикации.

Варианты решения проблем с подключением ТСД:

1.  Проверить, что все настройки выполнены по инструкции. 

Особенно обратить внимание на пункт «Публиковать HTTP сервисы расширений по умолчанию».

Соответствующая галка должна быть проставлена.

Публиковать HTTP сервисы в 1С

2. Проверить, что на ТСД введены верные параметры подключения. 

Адрес в строке URL должен быть в формате c HTTP (например http://адрес сервера/имя базы)

3. Запустить эмулятор, указать параметры подключения как на ТСД или телефоне. 

Настройки эмулятора ТСД

После этого ввести код сотрудника и увидеть полную детализацию ошибки.

Детализация ошибки подключения ТСД

Пример ошибки подключения ТСД

В большинстве случаев вы увидите ответ сервера:

  • 404 — код ответа HTTP о том, что клиент был в состоянии общаться с сервером, но сервер не может найти данные согласно запросу.
  • 401 — ошибка авторизации. Проверьте верно ли введен логин/пароль в настройках.
  • 401.5 — ошибка авторизации. Проверьте верно ли введен логин/пароль в настройках подключения на ТСТ. 

Обратите внимание на настройки авторизации на стороне сервера, в настройках веб сервера разрешите анонимную аутентификацию, перезагрузите веб-сервер. 

Анонимная проверка подлинности IIS

Понравилась статья? Поделить с друзьями:
  • Ошибка 4008 при прошивке flashtool как исправить
  • Ошибка 4007 активные жалюзи радиатора
  • Ошибка 4005 при установке автокад 2023
  • Ошибка 4005 при подключении принтера win 10
  • Ошибка 4005 при восстановлении iphone 5s что это