AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.08.2013, 16:24   #1  
dyal is offline
dyal
Участник
 
8 / 10 (1) +
Регистрация: 20.03.2008
Web services и SOAP
Всем привет.
Есть задача: с публичного портала дергать аксаптовый веб-сервис. Ax 2012 R2, Windows Server 2008. Проблема вкратце – на тестовом примере удалось обратиться к веб-сервису из VS2010, но не удалось через SOAP, возникли проблемы аутентификации пользователя на АОС-е. Причины не понятны.

Тестовое окружение:
1) на одной машине установлены AOS и IIS
2) Web services on IIS установлены на дефолтный веб сайт (Default Web Site).
3) На форме Services and Application Integration Framework\Веб-сайты по соответствующему сайту проверка ошибок не выдает
4) Для Identity application pool сайта и соответствующего application для web services выбрана определенная доменная учетная запись
5) Аутентификация Default Web Site – anonymous
6) Аутентификация application для web services – windows (пробовал и с Basic аутентификацией)

Создан простенький кастомный сервис, в классе единственный метод:

Код:
[SysEntryPointAttribute(false),
AifCollectionTypeAttribute('_flag', Types::String)]
 
public void setFlags(str _flag)
 
{
Table1 Table1;
;
Table1.Field1 = _flag;
Table1.insert();
}
На форме Входящие порты создан порт для сервиса. Адаптер HTTP. В конфигурации в настройках безопасности прововал windows аутентификацию и basic аутентификацию (emeadaxsupport: How to implement basic authentication with Dynamics Ax 2012 web services).

Для проверки вызова сервиса в VS 2010 создан проект типа windows form application. Сервис добавлен в ссылки (при этом были запрошены реквизиты пользователя). В проекте форма с одной кнопкой, при нажатии которой работает код:

Код:
private void button1_Click(object sender, EventArgs e)
   {
       MyService.DyalServiceClient proxy = new MyService.DyalServiceClient();
       ;
 
       try
       {
 
           MyService.CallContext context = new MyService.CallContext();
 
           context.Company = "rus";
           proxy.setFlags(context, "Ura");
 
           MessageBox.Show("yes");
       }
       catch (Exception ex)
       {
           throw ex;
       }
   }
Код в VS работает. Далее хочу проверить работу через SOAP. Для проверки использую утилиту: http://www.soapui.org/SOAP-and-WSDL/...ith-wsdls.html. Создаю новый проект, указываю нужный WSDL URI. По необходимости указываю пользователя\пароль\домен. Пробую дернуть сервис и получаю ошибку unknown username or bad password. При этом что-то там заваливается так, что для следующей попытки сначала приходится дергать iisreset. В виндусовых логах вижу:

Код:
Object Server 01:  An error has occurred in the services framework.  Method: AifMessageInspector::AfterReceiveRequest.  Error: System.Security.SecurityException: Logon failure: unknown user name or bad password.
 
at System.Security.Principal.WindowsIdentity.KerbS4ULogon(String upn, SafeTokenHandle& safeTokenHandle)
at System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName, String type)
at System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName)
at Microsoft.Dynamics.Ax.Services.AxSessionInitBehavior.getUserSid(String logonAsUser)
at Microsoft.Dynamics.Ax.Services.AxServiceOperationContext.InitializeSession()
at Microsoft.Dynamics.Ax.Services.AxServiceOperationContext.InitializeContext()
at Microsoft.Dynamics.Ax.Services.AxServiceOperationContext.Attach(OperationContext owner)
at System.ServiceModel.ExtensionCollection`1.InsertItem(Int32 index, IExtension`1 item)
at System.Collections.Generic.SynchronizedCollection`1.Add(T item)
at Microsoft.Dynamics.Ax.Services.AifMessageInspector.AfterReceiveRequest(Message& request, IClientChannel channel, InstanceContext instanceContext)
The Zone of the assembly that failed was:
MyComputer 
А в виндусовых логах в разделе security всё интересней. Текст приведен ниже. RU\SPO – это учетная запись, под которой работают applicationpool-ы. Учетка доступ в Ах имеет. Сильно меня смущает упомянутый в последнем блоке Kerberos. Есть у кого взгляды на происходящее?

Код:
An account failed to log on.
 
Subject:
          Security ID:                            RU\SPO
          Account Name:                     spo
          Account Domain:                 RU
          Logon ID:                               0x1dce2
 
Logon Type:                                          3
 
Account For Which Logon Failed:
          Security ID:                            NULL SID
          Account Name:                     
          Account Domain:                 
 
Failure Information:
          Failure Reason:                      Unknown user name or bad password.
          Status:                                    0xc000006d
          Sub Status:                             0xc0000064
 
Process Information:
          Caller Process ID:  0xce4
          Caller Process Name:            E:\Program Files\Microsoft Dynamics AX\60\Server\MicrosoftDynamicsAX\bin\Ax32Serv.exe
 
Network Information:
          Workstation Name:              RUAXDEV04
          Source Network Address:    -
          Source Port:                           -
 
Detailed Authentication Information:
          Logon Process:                     C
          Authentication Package:     Kerberos
          Transited Services:                -
          Package Name (NTLM only):              -
          Key Length:                           0
Старый 14.08.2013, 19:03   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Тут бы не помешал кусок config'а сервиса и веб-приложения в части настройки binding'а.
Старый 14.08.2013, 21:31   #3  
dyal is offline
dyal
Участник
 
8 / 10 (1) +
Регистрация: 20.03.2008
вот, пожалуйста, значимый кусок файла конфигурации моей службы:

Код:
<bindings>
     <basicHttpBinding>
       <bindingname="basicHttpBindingWithWindowsAuth">
         <securitymode="TransportCredentialOnly">
           <transportclientCredentialType="Windows" />
         </security>
       </binding>
       <bindingname="basicHTTPBindingWithBasicAuth"bypassProxyOnLocal="false">
         <securitymode="TransportCredentialOnly">
           <transportclientCredentialType="Basic" />
         </security>
       </binding>
       <bindingname="NoSecurity" />
     </basicHttpBinding>
     <netTcpBinding>
       <bindingname="DefaultServiceGroupBinding"closeTimeout="00:05:00"
openTimeout="00:05:00"receiveTimeout="00:10:00"sendTimeout="00:05:00"
transactionFlow="false"transferMode="Buffered"transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"listenBacklog="10"maxBufferPoolSize="524288"
maxBufferSize="81920000"maxConnections="10"maxReceivedMessageSize="81920000">
         <readerQuotasmaxDepth="32000000"maxStringContentLength="81920000"
maxArrayLength="163840000"maxBytesPerRead="4096000"maxNameTableCharCount="16384000" />
         <reliableSessionordered="true"inactivityTimeout="00:10:00"
enabled="false" />
         <securitymode="Transport">
           <transportclientCredentialType="Windows"protectionLevel="EncryptAndSign" />
           <messageclientCredentialType="Windows" />
         </security>
       </binding>
     </netTcpBinding>
     <wsHttpBinding>
       <bindingname="wsHttpBindingWithWindowsAuth">
         <securitymode="TransportWithMessageCredential">
           <transportclientCredentialType="Windows">
             <extendedProtectionPolicypolicyEnforcement="Always"protectionScenario="TransportSelected" />
           </transport>
           <messageclientCredentialType="Windows" />
         </security>
       </binding>
     </wsHttpBinding>
   </bindings>
 
 
 
   <services>
     <servicebehaviorConfiguration="routingData"name="System.ServiceModel.Routing.RoutingService">
       <endpointaddress=""binding="basicHttpBinding"bindingConfiguration="basicHttpBindingWithWindowsAuth"
name="reqReplyEndpoint"contract="System.ServiceModel.Routing.IRequestReplyRouter" />
     </service>
   </services>
Старый 14.08.2013, 21:37   #4  
dyal is offline
dyal
Участник
 
8 / 10 (1) +
Регистрация: 20.03.2008
Я немного поэксперементировал с файлом конфигурации - механизм обеспечения безопасности ставил в none. Ничего не менялось. Полагаю, что проблема где-то рядом с Kerberos (которого у меня вроде бы нет) и SPN

Detailed Authentication Information:
Logon Process: C
Authentication Package: Kerberos
Transited Services: -
Package Name (NTLM only): -
Key Length: 0

System.Security.Principal.WindowsIdentity.KerbS4ULogon(String upn, SafeTokenHandle& safeTokenHandle)
Старый 19.08.2013, 08:36   #5  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Эти параметры меняли -
Authenticating-soap-requests ?

Не знаю как у вас, а у меня функции (operation contracts) для AX сервиса не отображаются в soapUI. Тоесть не так как ТУТ. Может правда я чего намудрил - установил 5 минут назад.
При этом функции из самописного WCF видены.

Мы для внешнего доступа к AX портам используем промежуточный WCF в котором AX WCF сервис добавлен в Service Reference.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 27.11.2014, 17:44   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Не знаю как у вас, а у меня функции (operation contracts) для AX сервиса не отображаются в soapUI
У SoapUI проблемы с сервисами использующими netTcp binding-и. В простых случаях можно тестировать используя WCF Test Client из поставки Visual Studio. Найти его правда на машине - тот еще квест
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (3), alex55 (1), Kabardian (2).
Старый 26.03.2015, 12:49   #7  
Sergey Vlasov is offline
Sergey Vlasov
Участник
 
18 / 31 (2) +++
Регистрация: 20.01.2009
Адрес: AU
Вчера понадобилость протестировать стандартный AIF WCF service через SoapUI, и я тоже наткнулся на проблему с аутентификацией. Попробовал разные варианты (менял аутентификацию на Basic, NTML, активация Basic aut в IIS, танцы с бубном и т.п.). Не помогло.

В итоге, наткнулся на обсуждение на форуме тут, что у SoapUI некие проблемы с аутентификацией с сервисами ахапки.

Поставил Burp Suite, настроил прокси на адрес веб сервиса, указал пользователя, пароль, настроил прокси в SoapUI, и все заработало на стандартном сервисе ахапки.

В итоге, в самом soap'e никакие данные пользователя не указываю, все идет через прокси.

Тестировал на стандартной VPC AX 2012 R3 CU8, на которой развернуты IIS и сервисы. SoapUI стоит на локальном компе, с которого я и коннектился на виртуалку.

Последний раз редактировалось Sergey Vlasov; 26.03.2015 в 12:51. Причина: bugs fixing
За это сообщение автора поблагодарили: Maxim Gorbunov (5), gl00mie (2).
Старый 02.06.2020, 15:55   #8  
dmitrybarynov is offline
dmitrybarynov
Участник
 
5 / 11 (1) +
Регистрация: 16.11.2019
Спустя много лет в soupui проблема так и осталась.
Нашел выход с переключением режимов входа.
https://community.smartbear.com/t5/S.../202476#M30582
За это сообщение автора поблагодарили: Logger (1).
Старый 03.06.2020, 08:27   #9  
michel1971 is offline
michel1971
Участник
 
77 / 78 (3) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от dmitrybarynov Посмотреть сообщение
Спустя много лет в soupui проблема так и осталась.
Нашел выход с переключением режимов входа.
https://community.smartbear.com/t5/S.../202476#M30582
да вроде уже давно как решена
Проблема с сервисами (401)
работает без проблем
Старый 04.06.2020, 22:51   #10  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Я в soapui подключал сервисы не по ссылке на wsdl, а использовал непосредственно сам wsdl.
Но всё равно это неудобно.

Для быстрого тестирования какой-нибудь функции вебсервиса удобнее использовать WcfStorm. Там нет танцев с бубном при создании референса на сервис.
__________________
Дмитрий
Теги
ax2012r3, soap, wcf, web сервис, webservice, веб-сервис

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: What changes are required if we change the Business Connector Proxy used by AX 2009 Generated AIF Web services Blog bot DAX Blogs 0 29.03.2010 15:05
axStart: InfoPath with default AIF web services Blog bot DAX Blogs 1 15.05.2008 02:27
Arijit Basu: Infopath, Web Services & AX Integration Blog bot DAX Blogs 0 04.05.2008 23:05
Consuming External Web Services (Dynamics AX 4) Blog bot DAX Blogs 0 19.02.2008 06:41
Inside Dynamics AX 4.0: The Web Framework Blog bot DAX Blogs 0 25.10.2007 03:04

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:14.