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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.10.2008, 12:13   #1  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Обращение к 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  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
В других конструкциях он такое же выдает, например
activitypointer act = (activitypointer)crmService.Retrieve(EntityName.activitypointer.ToString(), idGuid, new AllColumns());

Какой то неправильный у меня сервис получился, а в чем причина не пойму...
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара
Старый 17.10.2008, 14:45   #3  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Это вы скопировали из дебаггера? Приведите пожалуйста стек трасировки из лога ошибок сервера.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 17.10.2008, 16:46   #4  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Вообще-то, поскольку у Вас aspx-страничка, то я бы для начала вот это прочитал:
http://msdn.microsoft.com/en-us/library/cc151050.aspx
За это сообщение автора поблагодарили: sergeyjb (1).
Старый 19.10.2008, 12:16   #5  
maclai is offline
maclai
Участник
 
14 / 11 (1) +
Регистрация: 09.10.2008
Сергеи, посмотрите http://localhost:<порт>/sdk/list.aspx. Похоже,
при создании task activityid является обязателним атрибутом.
За это сообщение автора поблагодарили: sergeyjb (1).
Старый 20.10.2008, 08:14   #6  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
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  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Добавление конструкции для 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  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Сделал по примеру как в ссылке для 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");
    }
}
Код new CrmImpersonator() вызывает ошибку обращения к несуществующему токену...

Код:
 
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  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
В web.config'е Вашего приложения должно быть:
<identity impersonate="true"/>
Есть?
Старый 22.10.2008, 12:11   #10  
maclai is offline
maclai
Участник
 
14 / 11 (1) +
Регистрация: 09.10.2008
Добавление этого кода:

[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  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Так надо (проверить пока не могу)?:
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  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
А какие возможны варианты запрограммировать поведение ISV кнопки на форме? Кроме как через ASP страницу? Или это единственный метод?
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара
Старый 27.10.2008, 16:27   #13  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от sergeyjb Посмотреть сообщение
А какие возможны варианты запрограммировать поведение ISV кнопки на форме? Кроме как через ASP страницу? Или это единственный метод?
Весь функционал, который требуется от кнопки - выносить в Java Script, но с дебагом - намучаетесь конечно...
А какой именно функционал от этой кнопки требуется?
Старый 28.10.2008, 13:20   #14  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Вопрос в общем - о возможностях.

А от данной кнопки в частности требуется только смена статуса активности через срм-сервис чтобы воркфлоу видела эти изменения.
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара
Старый 28.10.2008, 14:57   #15  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Сергей, возможно более подробную информацию об ошибке вы получите из логов сервера. Вот статья о том как можно их включить: 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  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Спасибо Артем, а то с отладкой мне трудновато
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара
Старый 29.10.2008, 13:58   #17  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Помогло проблему устранить?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 30.10.2008, 14:30   #18  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Я сейчас переключился на интеграцию с шарпоинтом экстренно, через пару дней к этим кнопкам вернусь - тогда и опробую.

Тут вопрос возник с плагином на удаление акаунта.
На первой же строке валиться, причем такой же плагин на крейт акаунта работает.
Выдает ошибку:
Не удалось привести тип "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  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Видимо это и означает - типовой class cast. Properties[ParameterName.Target] имеет тип Moniker а не DynamicEntity. Почему - вопрос хороший.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 30.10.2008, 15:01   #20  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Из опыта работы с CRM 3.0... Плагины (тогда еще колауты) событий создания и изменения тогда тоже оперировали DynamicEntity, а вот события смены состояния и удаления, по какой-то идиотской логике получали лишь id и имя сущности. Теперь и то и другое содержится в классе Moniker. Видимо вам придется вычитывать объект самостоятельно. Печально, но Microsoft последовательна в своем идиотизме.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Быстродействие CrmService Bakai Madybaev Dynamics CRM: Разработка 16 21.03.2009 22:57
Обращение к полю сущности MFCшный Wizard Dynamics CRM: Разработка 28 12.02.2009 14:35
аутентификация crmService if_maks Dynamics CRM: Разработка 2 25.12.2008 11:52
Обращение! - Ответственный контакт? AlekseyS Dynamics CRM: Разработка 1 09.09.2008 13:04
Обращение: невозможно добавить Контракт Lazarus Dynamics CRM: Функционал 2 01.07.2008 13:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.