Добрый день, пытаюсь решить следующую проблему с авторизацией при вызове сервисов в AX 2012 (build 6.0.1108.670).
Из приложения на C# в Visual Studio вызываю любой Ax-овский сервис (сделал свой кастомный), например:
PHP код:
WX_CommonServiceClient com = new WX_CommonServiceClient();
string s = com.getPhoneTypes(null);
Если данное C#-приложение выполняется под пользователем, который обладает достаточными правами в AX, все проходит успешно, если же, например, пользователь в AX не заведен, происходит ошибка
Код:
System.ServiceModel.FaultException: Failed to logon to Microsoft Dynamics AX.
То есть, авторизация осуществляется по вызывающему сервис пользователю.
Решить проблему можно следующим образом (в мануалах по сервисам такого не нашел, опытным путем определилось) - добавить следующий код:
PHP код:
WX_CommonServiceClient com = new WX_CommonServiceClient();
com.ClientCredentials.Windows.ClientCredential.UserName = "user";
com.ClientCredentials.Windows.ClientCredential.Domain = "domain.ru";
com.ClientCredentials.Windows.ClientCredential.Password = "pass";
string s = com.getPhoneTypes(null);
- тогда под любым пользователем вызов сервиса происходит корректно.
Но данный вариант не очень нравится - хранить в коде или в конфигурационном файле учетные данные о пользователе с довольно широкими правами в AX.
При этом в настройке сервиса (в конфигурационной утилите в Configure Services) для каждого сервиса можно указать учетные данные (UserPrincipalName - по умолчанию заполняется данными учетной записи, под которой зарущен AOS; либо ServicePrincipalName и т.д.), и потом эта настройка копируется в C#-приложении - создается app.config, включающий в том числе и эти строки
PHP код:
<identity>
<userPrincipalName value="user@domain.ru" />
</identity>
Но это все не дает никакого эффекта - можно везде заполнить эти значения, либо просто стереть - результат не меняется.
Есть ли у кого каеи мысли на этот счет - это просто недоделка пока в AX 2012 (ведь если настройки по userprincipalname есть, значит, они должны использоваться), либо я что-то не так настраиваю?