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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.05.2013, 18:26   #1  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Axapta 2009 напрямую из ASP.NET
Наверное, всем, кто поупражнялся в использовании Портала, в какой-то момент приходила мысль о возможности использования Аксапты как источника данных и бизнес-логики для создания легкого сайта, не отягощенного SharePoint-ом.

Как мне показалось, единственным способом получить данные из Аксапты на asp-странице является использование контрола AxDataSource, для которого нужно выбрать заранее созданный в Аксапте DataSet.

Аксаптовский DataSet чем-то очень похож на DataSet в web-проекте на С#.
Такой же набор таблиц со связями.
Только на C# DataSet нужно собирать в web-проекте, а, еcли использовать Аксаптовский, то он уже готов и нужно просто прицепиться к нему AxDataSource-ом.

И все, вроде, замечательно работает внутри Visual Studio 2008 на встроенном веб-сервере, но, как только мы размещаем приложение на IIS, то присутствие на asp-странице AxDataSource сразу же приводит к ошибке, выскакивающей в браузере:
Цитата:

Server Error in '/' Application.

No .NET Business Connector session could be found.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: Microsoft.Dynamics.Framework.BusinessConnector.Session.Exceptions.NoKernelSessionException: No .NET Business Connector session could be found.

Source Error:

Line 43: <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />Line 44: Line 45: <dynamics:AxDataSource ID="AxDataSource1" runat="server" Line 46: DataSetName="EPReferral" ProviderView="Referral">Line 47: </dynamics:AxDataSource>
Source File: c:\A5\Default.aspx Line: 45

Stack Trace:

[NoKernelSessionException: No .NET Business Connector session could be found.] Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsSession.get_AxaptaAdapter() +55 Microsoft.Dynamics.Framework.Metadata.Ax.MetadataCache.GetDataSetMetadata(ISession session, String dataSetName) +42 Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxDataSource.GetMetadata(String dsName, Boolean reThrow) +286 Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxDataSource.ValidateDataSetNameAndProviderView(String dsName, String providerName, DataSetMetadata& metadata) +103 Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxDataSource.set_DataSetName(String value) +105 ASP.default_aspx.__BuildControlAxDataSource1() in c:\A5\Default.aspx:45 ASP.default_aspx.__BuildControlform1() in c:\A5\Default.aspx:18 ASP.default_aspx.__BuildControlTree(default_aspx __ctrl) in c:\A5\Default.aspx:1 ASP.default_aspx.FrameworkInitialize() in c:\A5\Default.aspx.cs:912307 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +55 System.Web.UI.Page.ProcessRequest() +91 System.Web.UI.Page.ProcessRequest(HttpContext context) +240 ASP.default_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\bc314b82\d1cf965\App_Web_goaoiejq.0.cs:0 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171

Version Information: Microsoft .NET Framework Version:2.0.50727.5466; ASP.NET Version:2.0.50727.5456
И ничего я с этим не могу сделать.

Дело в том, что сама сессия с Аксаптой, вроде бы, предварительно создается методом logon( ",",",") класса Axapta в нэйм-спейсе Microsoft.Dynamics.BusinessConnectorNet и существование сессии проверяется выводом ее номера и количества подключений, но AxDataSource упорно эту сессию видеть не хочет.

Очень хотелось бы знать, - кто-нибудь занимался программированием на asp.net напрямую без SharePoint, используя в качестве источника данных Аксапту и каким образом обходил описанную сложность?

Ах, да, самое интересное!

Если для созданного легокого сайта пул приложений заменить с родного для сайта, на пул приложений работающего Портала на SharePoint, то все начинает работать. AxDataSource видит сессию и нормально таскает данные из Аксапты.

Но, при этом любые попытки натаскать настройки из web.config Портала в web.config легкого сайта ни к чему не приводят!
Старый 09.05.2013, 19:01   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Narayana Посмотреть сообщение
Как мне показалось, единственным способом получить данные из Аксапты на asp-странице является использование контрола AxDataSource, для которого нужно выбрать заранее созданный в Аксапте DataSet.
Можно еще создать обычный DataSet в VS (xsd-схема), написать для каждого DataTable свой DataAdapter и выводить данные DataGrid. Если уж вы ушли от портала Dynamics AX, то и пишите с использованием только чистого .NET. Мне кажется, так меньше граблей соберете.
Старый 10.05.2013, 16:56   #3  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Можно еще создать обычный DataSet в VS (xsd-схема), написать для каждого DataTable свой DataAdapter и выводить данные DataGrid. Если уж вы ушли от портала Dynamics AX, то и пишите с использованием только чистого .NET. Мне кажется, так меньше граблей соберете.
Это не совсем понятно.
Каким образом можно в нашем случае использовать DataAdapter, кроме непосредственного подключения к SQL базе Аксапты?
Насколько я понимаю, какого-то готового провайдера данных для Аксапты нет.
А использование базы Аксапты напрямую лишает всех преимуществ работы с Аксаптовским DataSet.
Но, это еще пол-беды.
Вы же не собираетесь программировать генерацию родных для Аксапты RecId?

Или вы имели в виду что-то другое?
Старый 11.05.2013, 00:24   #4  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Вопрос к специалистам по ASP.NET
Попробовал открыть форму "Активные пользователи" в Аксапте и посмотреть, что происходит, когда на тестовой asp.net странице я пытаюсь вызвать метод Logon() из Аксаптовского класса Axapta, лежащего в сборке Microsoft.Dynamics.BusinessConnectorNet .

Оказалось, что сессия с Бизнес-коннектором честно устанавливается, но при этом, присутствующий на asp.net странице Аксаптовский контрол AxDataSource эту сессию не находит.

Дальше интереснее.
Если заменить родной пул приложений сайта на пул приложения работающего на SharePoint Аксаптовского портала, то можно увидеть следующее...
Сессия создается еще до загрузки какой либо страницы с сайта!
То же самое происходит, когда мы открываем тестовый сайт в Visual Studio 2008.
Сессия опять же создается еще до запуска какой либо страницы.

Все это наводит на мысль, что всегда инициализация контрола AxDataSorce происходит ДО вызова любого метода, вызванного событием на asp.net странице, в одном из которых я использую Logon().

То есть, получается, что у нас должен быть создан класс C#, который не привязан ни к одной странице и один из методов этого класса должен запускаться по событию не на странице, а по событию IIS.
Например, по любому запросу любой страницы из браузера клиента.

Дело в том, что веб-приложение кардинально отличается от виндовс-приложения тем, что у веб-приложения нет метода Main(). Соответсвенно, нужно как-то извратиться, чтобы установить сессию с Аксаптой один раз, когда клиент зашел на сайт. Далее, держать ее включенной все время, пока он запрашивает страницы и, наконец, завершить, когда клиент ушел с сайта.
Вот тогда, наверное, AxDataSource всегда будет работать.

Попытки посмотреть, как это устроено в Портале на SharePoint, ни к чему не приводят. Там все закрыто и посмотреть код невозможно.

Получается, что в обычных asp.net приложениях все подключения к данным производятся путем настройки ConnectionString в web.config сайта.
В традиционных windows-приложениях с помощью Logon() и далее работой только с записями отдельных таблиц, но не с Аксаптовским DataSet (судя по хелпу)

А вот использование Data Source в плане интеграции с веб-приложениями нигде не документируется.

Вопрос к знатокам, - как заставить работать код в классе, не привязанный к конкретной странице не по событиям страницы и в каком NameSpace находятся обработчики событий IIS, к которым можно было бы привязать метод с вызовом Logon() ?
Старый 11.05.2013, 12:08   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Narayana Посмотреть сообщение
Все это наводит на мысль, что всегда инициализация контрола AxDataSorce происходит ДО вызова любого метода, вызванного событием на asp.net странице, в одном из которых я использую Logon(). То есть, получается, что у нас должен быть создан класс C#, который не привязан ни к одной странице и один из методов этого класса должен запускаться по событию не на странице, а по событию IIS.
Будучи далек от веб-разработки, я слышал, что подобный код можно написать в обработчиках событий Application_Start или Session_Start в Global.asax
Цитата:
Сообщение от Narayana Посмотреть сообщение
как заставить работать код в классе, не привязанный к конкретной странице не по событиям страницы
А еще в ASP.NET при работе с IIS начиная с версии 7.5 (который идет на W7 и W2K8 R2) можно выполнять код для "разогрева" веб-приложения, реализуя интерфейс System.Web.Hosting.IProcessHostPreloadClient, см. Автозапуск приложений ASP.NET
За это сообщение автора поблагодарили: Narayana (1).
Старый 11.05.2013, 12:52   #6  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Будучи далек от веб-разработки, я слышал, что подобный код можно написать в обработчиках событий Application_Start или Session_Start в Global.asax
А еще в ASP.NET при работе с IIS начиная с версии 7.5 (который идет на W7 и W2K8 R2) можно выполнять код для "разогрева" веб-приложения, реализуя интерфейс System.Web.Hosting.IProcessHostPreloadClient, см. Автозапуск приложений ASP.NET

Спасибо. Попробовал вызвать Logon() из global.asax . Действительно, соединение создается и в списке активных пользователей появляется, но, к сожалению, AxDataSource и другие контролы Аксапты типа AxUserControlWebPart это соединение не видят.
Все получается немного глубже.
А именно... При создании сессии в форме "Активные пользователи" появляется два активных пользователя, - с типами сеансов "Business Connector" и "Веб пользователь".
Причем, если попытаться вызвать Logoff(), эти соединения никуда не исчезают.
А если при существующей сессии попытаться еще раз вызвать Logon(), то добавляется только новый сеанс "Веб пользователь", а "Бизнес Коннектор" не появляется.
Похоже, авторизация не происходит до конца...
Старый 11.05.2013, 14:34   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Все там до конца происходит, иначе сессия бы не создалась вовсе. См. Закрыть AxaptaCOMConnector из AXAPTA. На счет отображения на форме активных пользователей см. также Форма активных пользователей (SysUsersOnline) и сессии COM-коннектора

Последний раз редактировалось gl00mie; 11.05.2013 в 14:36.
Старый 13.05.2013, 11:55   #8  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Narayana Посмотреть сообщение
Каким образом можно в нашем случае использовать DataAdapter, кроме непосредственного подключения к SQL базе Аксапты?
У адаптера есть виртуальные методы insert, update, delete. Можно реализовать эти методы таким образом, чтобы в них шло подключение к аксапте через BC и выполнялись все необходимые запросы.

Цитата:
Сообщение от Narayana Посмотреть сообщение
Насколько я понимаю, какого-то готового провайдера данных для Аксапты нет.
Готового нет, нужно написать.
Старый 13.05.2013, 14:16   #9  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Цитата:
Сообщение от Narayana Посмотреть сообщение
Попытки посмотреть, как это устроено в Портале на SharePoint, ни к чему не приводят. Там все закрыто и посмотреть код невозможно.
Есть приблуда которая позволяет просматривать код используя Рефлексию
Старый 13.05.2013, 18:06   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
под какой учеткой работает пул приложений?
а impersonate (олицетворение) у вас как настроено на веб-приложении?
где хранится инфа о сессии в базе или в памяти?
Старый 13.05.2013, 23:31   #11  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Wamr Посмотреть сообщение
под какой учеткой работает пул приложений?
а impersonate (олицетворение) у вас как настроено на веб-приложении?
где хранится инфа о сессии в базе или в памяти?
К сожалению, я не понимаю, под какой учеткой работает пул приложений.
В Basic Settings для сайта есть параметры доступа к физическому каталогу сайта. У меня в Path credentials указано Application user (path-through autentication). При этом тест говорит о том, что невозможно проверить доступ. Я так понимаю, что из-за неопределенности в данный момент того, кто будет подключаться к сайту. Если поставить админа домена, то тест проходит. Но это не меняет доступность сессии Бизнес-коннектора.


Я это до сих пор понимал как то, что для пользователя, зашедшего на сайт, проверяются права доступа к каталогу сайта.
А что такое учетная запись пула приложений, я, вообще, не понимаю.
Слово Autentity приводит меня в состояние умственного ступора.
Я нигде не нашел его строгого определения, но склоняюсь к тому, что это сопоставление процесса и учетной записью пользователя, под которой этот процесс коннектится куда-то.

Вообще, система безопасности, это самое болезненное для меня место.
Никак невозможно найти краеугольный камень, от которого нужно отталкиваться,
чтобы понять всю систему.

Имперсонайшн настроен на Authenticated user. Я это понимаю так, что пользователь сначала заходит на сайт, а затем доступность ресурсов сайта определяется по правам конктретного пользователя на этих ресурсах.
Было бы интересно узнать, так ли это?

"где хранится инфа о сессии в базе или в памяти"

А хрен ее знает, где она хранится!
Если честно, то в голове состояние полной дезориентации.
Пока что я пытаюсь от понимания обычного доступа к файлам для обычного пользователя перейти к пониманию прав процессов. Но, смешение всякого рода явлений, которые имеют свои права, приводит к ощущениям Алисы в Зазеркалье... )
Вот, например, ваш вопрос про учетную запись для пула приложений...
Мне казалось, что пул приложений, это просто изолированное пространство, в котором выполняется приложение. Или какой-то выделенный процесс, который создается, когда возникает новый сайт. Если изменить пул приложений для данного приложения, то это приложение будет выполняться в чужом процессе.
То есть, получается, что учетка для пула приложений, это учетка для процесса?

В общем, вытащил на свет Божий книжку Ульяма и Станека Internet Information Services 7.0 и пытаюсь читать, испытая возмущение, что приходится этим заниматься вместо программирования... )

Если вы сможете дать определение для "Identity", буду вам очень признателен.
Старый 13.05.2013, 23:40   #12  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Dreadlock Посмотреть сообщение
Есть приблуда которая позволяет просматривать код используя Рефлексию
Это интересно. Надо попробовать. Но, только после того, как научусь не пользоваться SharePoint-ом совсем для работы с Аксаптой под вебом.

То, что Портал не отображается корректно под Хромом, все перевернуло в голове.
Вот, представьте себе... вы выделяете из Портала нужные куски, настраиваете доступ для потенциальных представителей, которые могут быть довольно разношерстным народом в отличие от корпоративных пользователей. Долго возитесь с допрограммированием системы регистрации пользователей... Все готово... Вы пробуете под разными браузерами и оказывается, что под Хромом, на котором работает больше 30% народа, ваше приложение нормально не работает. И ваши ощущения? ))

Нет. Что-то не так в Датском королевсте... )
Все-таки для большой корпоративной системы типа Аксапты должны существовать эффективные инструменты работы с розницей и создания Фронт-офисов под вебом. А SharePoint для этого никак не катит.
Старый 13.05.2013, 23:42   #13  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
У адаптера есть виртуальные методы insert, update, delete. Можно реализовать эти методы таким образом, чтобы в них шло подключение к аксапте через BC и выполнялись все необходимые запросы.



Готового нет, нужно написать.
Дак, опять же, через Бизнес-коннектор!
А я как раз и не могу добиться, чтобы он находился для работы с данными... )
Потому как, если найдется, то можно ведь и DataSource использовать...
Старый 14.05.2013, 09:47   #14  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
:)
Цитата:
Сообщение от Narayana Посмотреть сообщение
То, что Портал не отображается корректно под Хромом, все перевернуло в голове.
Вот, представьте себе... вы выделяете из Портала нужные куски, настраиваете доступ для потенциальных представителей, которые могут быть довольно разношерстным народом в отличие от корпоративных пользователей. Долго возитесь с допрограммированием системы регистрации пользователей... Все готово... Вы пробуете под разными браузерами и оказывается, что под Хромом, на котором работает больше 30% народа, ваше приложение нормально не работает. И ваши ощущения? ))
Можно в хром установить вот это
Старый 14.05.2013, 10:58   #15  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Dreadlock Посмотреть сообщение
Можно в хром установить вот это
А как анонимные пользователи будут угадывать, что им это нужно предварительно установить, чтобы зайти на Портал?
Старый 14.05.2013, 12:52   #16  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Wamr Посмотреть сообщение
под какой учеткой работает пул приложений?
а impersonate (олицетворение) у вас как настроено на веб-приложении?
где хранится инфа о сессии в базе или в памяти?

Разобрался с учеткой пула приложений!
Ура, все работает!!!
Оказывается, не только сам сайт и приложение должны иметь правильный аккаунт для доступа к ресурсам, но и пул приложений тоже... )))

Итак, Аксаптовский DataSource вполне себе можно использовать без всяких SharePoint-овских извращений и работает это все довольно быстро!
Старый 15.05.2013, 07:29   #17  
Romb is offline
Romb
Участник
Аватар для Romb
 
79 / 22 (1) +++
Регистрация: 06.01.2004
Простите за нескромный вопрос. А что именно вы добились такой разработкой? Перечитал просто пост и не понял - что в итоге-то получилось?
Веб-приложение на C# которое через BC тягает данные из АХ?
Поделитесь опытом, пожалуйста, для личной базы знаний.
Старый 15.05.2013, 19:00   #18  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Romb Посмотреть сообщение
Простите за нескромный вопрос. А что именно вы добились такой разработкой? Перечитал просто пост и не понял - что в итоге-то получилось?
Веб-приложение на C# которое через BC тягает данные из АХ?
Поделитесь опытом, пожалуйста, для личной базы знаний.

Да, добился возможности создания веб-приложения без SharePoint, которое через BC тягает данные из Ax. И не просто данные, а данные в виде Аксаптовского DataSet. То есть, Аксапта не просто становится заменителем SQL server для веб-приложения, а одновременно Data Access Layer + Business Logic Layer в одном флаконе. А это означает, что Аксапта становится не только системой управления предприятием, а еще и большей частью движка для сайта, насыщенного данными.
По сути дела, я просто раскопал существующую технологию свободной веб-разработки для Аксапты, которая на фоне Портала замалчивается.
На самом-то деле, эти приемы работы с Аксаптой через ASP.NET нужно было жирно осветить в документации, но у них не хватило возможностей и Портал-то нормально описать.
За это сообщение автора поблагодарили: Romb (1), Logger (8).
Теги
asp.net

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Элементы для Ax User Control в Аксапта 2009 на asp.net Narayana DAX: Программирование 22 25.01.2013 14:28
Существенное снижение производительности после перехода на AX 2009 с Axapta 3.0 Rivez DAX: Функционал 41 17.11.2011 23:54
Solutions Monkey: Migrating X++ web forms to AX 2009 EP asp.net framework Blog bot DAX Blogs 0 09.11.2010 19:05
mbsturk: Ax 2009 Rollup 4 Version Checker Blog bot DAX Blogs 0 29.04.2010 17:05
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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