17.10.2008, 12:13 | #1 |
Участник
|
Обращение к CrmService
Стандартный код выдает ошибку
using System; using System.Data; using System.Configuration; using System.Collections; using System.IO; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml; using CrmSdk; using CrmSdk.Discovery; public partial class UpdateActivity : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.Clear(); Response.ContentType = "text/xml"; CrmAuthenticationToken token = new CrmAuthenticationToken(); token.AuthenticationType = 0; token.OrganizationName = "Samarasoft"; CrmService crmService = new CrmService(); crmService.CrmAuthenticationTokenValue = token; crmService.Credentials = System.Net.CredentialCache.DefaultCredentials; AppSettingsReader appSettings = new AppSettingsReader(); crmService.Url = appSettings.GetValue("CrmSdk.CrmService", Type.GetType("System.String")).ToString(); task my_task = new task(); my_task.subject = "my_task_1"; Guid t_guid = new Guid("A64664F4-E699-DD11-B4E0-00A0C5B316E9"); Owner t_owner = new Owner(); t_owner.Value = t_guid; t_owner.type = EntityName.systemuser.ToString(); my_task.ownerid = t_owner; Guid accountId = crmService.Create(my_task); } } Ошибка идет на шаге Guid accountId = crmService.Create(my_task); такая: Exception information: Exception type: SoapException Exception message: System.Web.Services.Protocols.SoapException: Сервер не распознал значение заголовка HTTP SOAPAction: http://schemas.microsoft.com/crm/200...ervices/Create. в System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() в System.Web.Services.Protocols.SoapServerProtocol.Initialize() в System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) в System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) Request information: Request URL: http://crm:1001/UpdateActivity.aspx?...Mode=Completed Request path: /UpdateActivity.aspx User host address: 192.168.100.62 User: Is authenticated: False Authentication Type: Thread account name: NT AUTHORITY\NETWORK SERVICE Что то я уже всю голову сломал в чем дело - стандартная конструкция не работает Подскажите в чем может быть дело...
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
17.10.2008, 12:46 | #2 |
Участник
|
В других конструкциях он такое же выдает, например
activitypointer act = (activitypointer)crmService.Retrieve(EntityName.activitypointer.ToString(), idGuid, new AllColumns()); Какой то неправильный у меня сервис получился, а в чем причина не пойму...
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
17.10.2008, 14:45 | #3 |
Moderator
|
Это вы скопировали из дебаггера? Приведите пожалуйста стек трасировки из лога ошибок сервера.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
17.10.2008, 16:46 | #4 |
Участник
|
Вообще-то, поскольку у Вас aspx-страничка, то я бы для начала вот это прочитал:
http://msdn.microsoft.com/en-us/library/cc151050.aspx |
|
|
За это сообщение автора поблагодарили: sergeyjb (1). |
19.10.2008, 12:16 | #5 |
Участник
|
Сергеи, посмотрите http://localhost:<порт>/sdk/list.aspx. Похоже,
при создании task activityid является обязателним атрибутом. |
|
|
За это сообщение автора поблагодарили: sergeyjb (1). |
20.10.2008, 08:14 | #6 |
Участник
|
maclai:
Интересная страница, не знал о ее существовании. Действительно поле activityid отмечено как Required For Grid. Удивило то, что ownerid не помечено как обязательное, хотя на форме поле "ответственный" стоит с красной звездочкой. Гуревич Денис: Спасибо за ссылку, сейчас попробую как там пишут. Есть подозрение судя по ошибкам что с самим сервисом не порядок а не с набором отправляемых полей. Я ожидал бы другой ошибки если обязательное поле отсутствовало. Хотя попробую все варианты. Артем, это часть целого сообщения в системном журнале: "Журналы Windows - Приложение". Если есть отдельный журнал ошибок CRM сервера то подскажите где его посмотреть. А из системного полный текст ошибки (точнее предупреждения): Код: Event code: 3005 Event message: Возникло необработанное исключение. Event time: 20.10.2008 8:47:52 Event time (UTC): 20.10.2008 3:47:52 Event ID: 907e722b17074104b8b6d5540dbae94c Event sequence: 6 Event occurrence: 1 Event detail code: 0 Application information: Application domain: /LM/W3SVC/3/ROOT-1-128689480638620121 Trust level: Full Application Virtual Path: / Application Path: C:\inetpub\Infrastructure\ Machine name: SRV-CRM-01 Process information: Process ID: 1828 Process name: w3wp.exe Account name: NT AUTHORITY\NETWORK SERVICE Exception information: Exception type: SoapException Exception message: System.Web.Services.Protocols.SoapException: Сервер не распознал значение заголовка HTTP SOAPAction: http://schemas.microsoft.com/crm/200...ervices/Create. в System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() в System.Web.Services.Protocols.SoapServerProtocol.Initialize() в System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) в System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) Request information: Request URL: http://crm:1001/UpdateActivity.aspx?...Mode=Completed Request path: /UpdateActivity.aspx User host address: 192.168.100.62 User: Is authenticated: False Authentication Type: Thread account name: NT AUTHORITY\NETWORK SERVICE Thread information: Thread ID: 5 Thread account name: NT AUTHORITY\NETWORK SERVICE Is impersonating: False Stack trace: в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) в CrmSdk.CrmService.Create(BusinessEntity entity) в c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\5c7d8db1\29570109\App_WebReferences.wh6ss6eb.0.cs:строка 204 в UpdateActivity.Page_Load(Object sender, EventArgs e) в c:\inetpub\Infrastructure\UpdateActivity.aspx.cs:строка 64 в System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) в System.Web.UI.Control.OnLoad(EventArgs e) в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) Custom event details:
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
20.10.2008, 08:32 | #7 |
Участник
|
Добавление конструкции для activityid проблему не решило, но на будущее лишним явно не будет.
Key t_key = new Key(); t_key.Value = new Guid(); my_task.activityid = t_key; Сейчас буду с Impersonate разбираться. Не зря в логе: .............. Is authenticated: False .............. Is impersonating: False .............. Не думал сначала что обращение к сервису с ASPX страницы отличается от стандартного примера в SDK. Предполагал что они в расчете на WEB доступ пример писали.
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
20.10.2008, 14:09 | #8 |
Участник
|
Сделал по примеру как в ссылке для ASP:
Код: using System; ................................. using Microsoft.Win32; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; public partial class UpdateActivity : System.Web.UI.Page { public string orgname; public string crmurl; public string metaurl; protected void Page_Load(object sender, EventArgs e) { RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM"); string ServerUrl = regkey.GetValue("ServerUrl").ToString(); crmurl = ServerUrl + "/2007/crmservice.asmx"; metaurl = ServerUrl + "/2007/metadataservice.asmx"; orgname = "Samarasoft"; using (new CrmImpersonator()) { CrmAuthenticationToken token; token = CrmAuthenticationToken.ExtractCrmAuthenticationToken(Context, orgname); token.OrganizationName = orgname; token.AuthenticationType = 0; CrmService service = new CrmService(); service.Credentials = System.Net.CredentialCache.DefaultCredentials; service.CrmAuthenticationTokenValue = token; service.Url = crmurl; } Response.Write("Done"); } } Код: Event code: 3005 Event message: Возникло необработанное исключение. Event time: 20.10.2008 14:50:28 Event time (UTC): 20.10.2008 9:50:28 Event ID: a22bbfc8755f4f539d4a8ad4786cebed Event sequence: 47 Event occurrence: 3 Event detail code: 0 Application information: Application domain: /LM/W3SVC/4/ROOT-8-128689694218393361 Trust level: Full Application Virtual Path: / Application Path: C:\inetpub\asp_automate\ Machine name: SRV-CRM-01 Process information: Process ID: 5768 Process name: w3wp.exe Account name: NT AUTHORITY\NETWORK SERVICE Exception information: Exception type: InvalidOperationException Exception message: OpenThreadToken failed with hr = 1008 Request information: Request URL: http://crm:1003/UpdateActivity.aspx?sState=Update Request path: /UpdateActivity.aspx User host address: 192.168.100.62 User: Is authenticated: False Authentication Type: Thread account name: NT AUTHORITY\NETWORK SERVICE Thread information: Thread ID: 7 Thread account name: NT AUTHORITY\NETWORK SERVICE Is impersonating: False Stack trace: в Microsoft.Crm.Sdk.CrmImpersonator.Impersonate() в UpdateActivity.Page_Load(Object sender, EventArgs e) в c:\inetpub\Asp_automate\UpdateActivity.aspx.cs:строка 33 в System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) в System.Web.UI.Control.OnLoad(EventArgs e) в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) Custom event details:
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
20.10.2008, 17:07 | #9 |
Участник
|
В web.config'е Вашего приложения должно быть:
<identity impersonate="true"/> Есть? |
|
22.10.2008, 12:11 | #10 |
Участник
|
Добавление этого кода:
[quote=sergeyjb;180050]Добавление конструкции для activityid проблему не решило, но на будущее лишним явно не будет. Key t_key = new Key(); t_key.Value = new Guid(); my_task.activityid = t_key;] даст вам гуид null, что само по себе является ошибкой. Если сама сущность создается через создание ее гуида, как компонент вебсервиса - значит или не все условия генерации выполняются, или генератор (сервис) используется не верно... Я сам ломаю голову над своим generic sql erorr... если добьешь - черкни, в чем там дело было |
|
22.10.2008, 13:44 | #11 |
Участник
|
Так надо (проверить пока не могу)?:
Key t_key = new Key(); t_key.Value = NewGuid(); my_task.activityid = t_key; Судя по описанию должен дать новый Гуид Guid.NewGuid Method - This is a convenient static method that you can call to get a new Guid У меня проблема ни с generic sql erorr (до этого не доходит пока даже), а с авторизацией... Не было <identity impersonate="true"/> - поставил... Теперь надо с настройками IIS7 на стороне сервера разобраться: с пулами приложений (мое связано с DefaultAppPool сейчас) и "проверка подлинности" (у меня включены на этом узле "Олицетворение ASP.NET" и "Проверка подлинности Windows"). Сейчас браузер выдает ошибку "Ошибка HTTP 500.24 - Internal Server Error Обнаружены значения параметров ASP.NET, которые неприменимы в интегрированном режиме управляемого конвейера." Так что до проблем с пустым Гуидом еще как до луны
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
23.10.2008, 14:55 | #12 |
Участник
|
А какие возможны варианты запрограммировать поведение ISV кнопки на форме? Кроме как через ASP страницу? Или это единственный метод?
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
27.10.2008, 16:27 | #13 |
Чайный пьяница
|
Цитата:
А какой именно функционал от этой кнопки требуется? |
|
28.10.2008, 13:20 | #14 |
Участник
|
Вопрос в общем - о возможностях.
А от данной кнопки в частности требуется только смена статуса активности через срм-сервис чтобы воркфлоу видела эти изменения.
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
28.10.2008, 14:57 | #15 |
Moderator
|
Сергей, возможно более подробную информацию об ошибке вы получите из логов сервера. Вот статья о том как можно их включить: http://support.microsoft.com/kb/907490/en-us. В своё время я так и отлаживался, так как в дебагер валится лишь общая ошибка веб сервиса.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: sergeyjb (1). |
29.10.2008, 07:23 | #16 |
Участник
|
Спасибо Артем, а то с отладкой мне трудновато
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
29.10.2008, 13:58 | #17 |
Moderator
|
Помогло проблему устранить?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.10.2008, 14:30 | #18 |
Участник
|
Я сейчас переключился на интеграцию с шарпоинтом экстренно, через пару дней к этим кнопкам вернусь - тогда и опробую.
Тут вопрос возник с плагином на удаление акаунта. На первой же строке валиться, причем такой же плагин на крейт акаунта работает. Выдает ошибку: Не удалось привести тип "Microsoft.Crm.Sdk.Moniker" объекта к типу "Microsoft.Crm.Sdk.DynamicEntity". Что эта ошибка вообще означает? И почему при крейте проблем с приведением у него нет? Выдает такое как на пре- так и пост-срабатываение. Есть какая-то особенность обращения к объекту, вызвавшему плагин на удаление? Код: using System; using System.Collections.Generic; using System.Text; using System.IO; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using ShPAccountDeletePlugin.st2; namespace ShPAccountDeletePlugin { public class UpdateAccountOnDelete : IPlugin { public void Execute(IPluginExecutionContext context) { DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target]; .............................................. } } }
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара |
|
30.10.2008, 14:50 | #19 |
Moderator
|
Видимо это и означает - типовой class cast. Properties[ParameterName.Target] имеет тип Moniker а не DynamicEntity. Почему - вопрос хороший.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.10.2008, 15:01 | #20 |
Moderator
|
Из опыта работы с CRM 3.0... Плагины (тогда еще колауты) событий создания и изменения тогда тоже оперировали DynamicEntity, а вот события смены состояния и удаления, по какой-то идиотской логике получали лишь id и имя сущности. Теперь и то и другое содержится в классе Moniker. Видимо вам придется вычитывать объект самостоятельно. Печально, но Microsoft последовательна в своем идиотизме.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Быстродействие CrmService | 16 | |||
Обращение к полю сущности | 28 | |||
аутентификация crmService | 2 | |||
Обращение! - Ответственный контакт? | 1 | |||
Обращение: невозможно добавить Контракт | 2 |
|