20.08.2012, 14:34 | #1 |
Возьми свет!!!
|
Web Service Sharepoint и вход по имени пользователя чере Net Business Connector
Доброго времени суток!!!
Помогите пожалуйста кто чем может. Ситуация такая, написал я для того чтобы на EP была возможность использовать технологию Ajax - веб-службу. Код довольно простой, веб-служба создает net business connector соединение к аксапте и запращивает данные из аксапты из таблицы(в будущем будет вызов методов аксапты) но все бы хорошо если бы не вот такая неприятность. метод logon на объекте axapta() не отрабатывает, logonAs отрабатывает если указать там конкретного пользователя, что собственно не устраивает, т.е. хотелось бы сделать таким образом чтобы axapta(net bc) запускался под тем пользоваетелем который заходит на узел sharepoint. Вот собственно код самого сервиса Код: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using Microsoft.Dynamics.BusinessConnectorNet; using Microsoft.SharePoint; using Microsoft.SharePoint.Utilities; namespace WebServiceTest { /// <summary> /// Summary description for Service1 /// </summary> [System.Web.Script.Services.ScriptService] [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] public class Service1 : System.Web.Services.WebService { [WebMethod] public DataSet GetCounty(String controlName,String region) { String result = ""; Axapta ax; Boolean b = true; System.Data.DataTable table = new DataTable("Answer"); DataColumn column; DataRow row; DataSet set; int countI = 0; // Create new DataColumn, set DataType, // ColumnName and add to DataTable. column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "controlName"; column.ReadOnly = true; table.Columns.Add(column); column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "htmlResult"; column.ReadOnly = true; table.Columns.Add(column); set = new DataSet(); set.Tables.Add(table); // Visualize DataSet. ax = new Axapta(); System.Net.NetworkCredential nc = new System.Net.NetworkCredential("xxxxxxxx", "xxxxx"); //nc = System.Net.CredentialCache.DefaultCredentials.GetCredential(new Uri("http://test:800/sites/barsaxapta"),"Basic"); try { ax.LogonAs("xxxxxx","BARS",nc , null, null, null, null); } catch (Exception e) { result = "#Ошибка подключения " + nc.UserName + "\n"; } if (b) { AxaptaRecord axRecord = ax.CreateAxaptaRecord("AddressCounty"); axRecord.ExecuteStmt("select CountyId,Name from %1 where %1.StateId == '" + region + "'"); countI = 0; while (axRecord.Found) { result = result + axRecord.get_Field("CountyId") + "#" + axRecord.get_Field("Name") + "\n"; countI++; axRecord.Next(); } axRecord.Dispose(); ax.Logoff(); } row = table.NewRow(); row["controlName"] = controlName; row["htmlResult"] = result; table.Rows.Add(row); return set; } } } Или есть возможность хотя бы получить эти самые DefaultNetworkCredential потому что не получается... Пж-ста помогите!!!! DAX 4.0
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
20.08.2012, 14:41 | #2 |
Участник
|
А что за исключение генерируется?
насколько я помню, метод Logon всегда криво работал. Практика показывает, что лучше завести одного пользователя, под которым будет запускаться сеанс .NET BC. если вам надо запускать методы классов, какая разница под каким пользователем это работает? Если надо параметризироваться под пользователя - передавайте код пользователя в параметре: сэкономите кучу времени и нервов
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
20.08.2012, 14:42 | #3 |
Возьми свет!!!
|
Цитата:
Сообщение от plumbum
А что за исключение генерируется?
насколько я помню, метод Logon всегда криво работал. Практика показывает, что лучше завести одного пользователя, под которым будет запускаться сеанс .NET BC. если вам надо запускать методы классов, какая разница под каким пользователем это работает? Если надо параметризироваться под пользователя - передавайте код пользователя в параметре: сэкономите кучу времени и нервов просто такое чувство что не логинеца оно в windows, хотя стоит доменная авторизация
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
20.08.2012, 14:48 | #4 |
Участник
|
И все таки, что стоит в тексте исключения?
Да, это действительно странно, я давно не работал с .NET BC 2009, но вот как сейчас помню это "неписаное" правило Проверте также настройки Proxy пользователя в AX.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
20.08.2012, 15:06 | #5 |
Возьми свет!!!
|
Цитата:
Login error: Failed to logon to Axapta Администрирование -> настройки -> контроль доступа -> business connector proxy пользователь стоит
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
20.08.2012, 15:42 | #6 |
Участник
|
а почему последний параметр, где как раз конфигурация должна стоять, null?
Что стоит в параметре user? Proxy-User? зачем вам тогда вообще NetworkCredential, AX врод должна по имени пользователя и домену сама определить...
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
20.08.2012, 15:44 | #7 |
Возьми свет!!!
|
нет нет я уже исправил метод на Logon(null,null,null,null) и сообщил вам текст ошибки
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
20.08.2012, 15:54 | #8 |
Участник
|
погодите, в любом случае у вас должна быть указана хотя бы конфигурация AOS, вы же все таки к чему то подключаетесь
Если код выполняется на сервере из Web-Сервиса, (ASPX код или что там у вас), то ни о каком Logon речи быть не может: в реальной жизни это служба выполняющая запросы на сервере по мере их поступления. Вы можете "выудить" пользователя из запроса к методу Web-Service и указать его в методе LogonAs
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
За это сообщение автора поблагодарили: Murlin (1). |
20.08.2012, 16:10 | #9 |
Возьми свет!!!
|
Цитата:
Сообщение от plumbum
погодите, в любом случае у вас должна быть указана хотя бы конфигурация AOS, вы же все таки к чему то подключаетесь
Если код выполняется на сервере из Web-Сервиса, (ASPX код или что там у вас), то ни о каком Logon речи быть не может: в реальной жизни это служба выполняющая запросы на сервере по мере их поступления. Вы можете "выудить" пользователя из запроса к методу Web-Service и указать его в методе LogonAs есть DefaultNetworkCredential но что то не получается попытаюсь сейчас выудить ошибку
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
20.08.2012, 16:32 | #10 |
Возьми свет!!!
|
Цитата:
Сообщение от plumbum
погодите, в любом случае у вас должна быть указана хотя бы конфигурация AOS, вы же все таки к чему то подключаетесь
Если код выполняется на сервере из Web-Сервиса, (ASPX код или что там у вас), то ни о каком Logon речи быть не может: в реальной жизни это служба выполняющая запросы на сервере по мере их поступления. Вы можете "выудить" пользователя из запроса к методу Web-Service и указать его в методе LogonAs Код: nc = System.Net.CredentialCache.DefaultNetworkCredentials; String[] s = User.Identity.Name.Split('\\'); try { ax.LogonAs(s[1], "Bars", nc, null, null, null,null); } catch (Exception e) { result = "#Ошибка подключения " + e.Message + " " + s[1]; b = false; } Похоже придеца брица
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
20.08.2012, 18:06 | #11 |
Участник
|
Цитата:
Вот каким образом, уже замучался не знаток ни шарепойнта не c#.
s[1] - так не пойдет, присвойте имя пользователя переменной типа string и передайте напрямую эту переменную, а не ссылку на элемент массива. Это я сужу из опыта работы с .NET BC из самой AX. Ну чем черт не шутит может стоит пустые сроки ("") вместо null передавать? еще раз осмелюсь повториться: параметр "конфигурация" надо заполнить, и этот файл должен быть доступет из-под пользователся, выполняющего код, или попробовать указать имя сервера
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! Последний раз редактировалось plumbum; 20.08.2012 в 18:12. |
|
20.08.2012, 20:36 | #12 |
Возьми свет!!!
|
Цитата:
Сообщение от plumbum
это к чему было?
s[1] - так не пойдет, присвойте имя пользователя переменной типа string и передайте напрямую эту переменную, а не ссылку на элемент массива. Это я сужу из опыта работы с .NET BC из самой AX. Ну чем черт не шутит может стоит пустые сроки ("") вместо null передавать? еще раз осмелюсь повториться: параметр "конфигурация" надо заполнить, и этот файл должен быть доступет из-под пользователся, выполняющего код, или попробовать указать имя сервера
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
23.08.2012, 10:50 | #13 |
Возьми свет!!!
|
Понемногу получается
Заполнение адреса клиента и заказа получается хорошо, и довольно быстро. Подтягиваю данные из нашего кладра(правда устаревший немного) интересно а почему microsoft не сделал поддержу ajax на EP, планируется ли вообще это делать или нет, было бы вообще замечательно иметь дело с той же сессией к тому же.
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
23.08.2012, 11:14 | #14 |
Молодой, подающий надежды
|
|
|
|
За это сообщение автора поблагодарили: macklakov (1). |
|
|