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, ООО "Программные технологии", Самара
Старый 28.10.2008, 14:57   #8  
Артем 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   #9  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Спасибо Артем, а то с отладкой мне трудновато
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара
Старый 29.10.2008, 13:58   #10  
Артем 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   #11  
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   #12  
Артем 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   #13  
Артем 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
Старый 31.10.2008, 15:27   #14  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Повешусь скоро
Мало того что все в кучу в этой CRM - и java script, и C#, и ASP, и dll, и Web-services, так еще и через одно место

Спасибо за разьяснение, буду знать где рыть... А то я с колаутами в 3.0 не работал, не знал что такой нюанс есть.
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара

Последний раз редактировалось sergeyjb; 31.10.2008 в 15:30.
Старый 31.10.2008, 15:29   #15  
Сабитов Андрей is offline
Сабитов Андрей
MCTS
Аватар для Сабитов Андрей
MCBMSS
Лучший по профессии 2009
 
851 / 122 (6) +++++
Регистрация: 07.09.2006
Адрес: СПб
Добро пожаловать в наш МИР !!!
__________________
Старый 05.11.2008, 13:22   #16  
sergeyjb is offline
sergeyjb
Участник
Аватар для sergeyjb
 
68 / 12 (1) ++
Регистрация: 01.10.2008
Артем, имея объект типа Moniker в плагине на удаление я оптимальным путем вытаскиваю значение пользовательского атрибута в следующем коде? Ничего по незнанию лишнего не написал тут? Первый раз такую вещь програмлю. Чтоб потом по одним и тем же граблям не ходить думая что это оптимальный код.

Код:
 
Moniker moniker = (Moniker)context.InputParameters[ParameterName.Target];
Guid accountId_read = moniker.Id;
ICrmService service_read = context.CreateCrmService(true);
TargetRetrieveDynamic target = new TargetRetrieveDynamic();
target.EntityId = accountId_read;
target.EntityName = EntityName.account.ToString();
Microsoft.Crm.Sdk.Query.ColumnSet cols = new Microsoft.Crm.Sdk.Query.ColumnSet(new string[] { "name", "new_sharepointdocumentlibrarytitle" });
RetrieveRequest retrieve = new RetrieveRequest();
retrieve.Target = target;
retrieve.ColumnSet = cols;
retrieve.ReturnDynamicEntities = true;
RetrieveResponse response = (RetrieveResponse)service_read.Execute(retrieve);
DynamicEntity retrievedEntity = (DynamicEntity)response.BusinessEntity;
string listName = retrievedEntity["new_sharepointdocumentlibrarytitle"].ToString();
__________________
Сергей Осипов, MCTS:SQL Server 2005, ООО "Программные технологии", Самара
Старый 05.11.2008, 14:22   #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
Боюсь, Сергей, как коддер я уже выпал из обоймы, но пару советов все же дам.
Во первых, специализированные методы выполняются быстрее, чем Excecute. Обычно об этом можно не думать, но в случае плагина стоит заняться оптимизацией. Иными словами я использовал бы метод Retrieve вместо Excecute.
Во вторых, данная функциональность, думаю, потребуется вам не один раз, так что имеет смысл вынести этот код в родительский класс. Иными словами сделать некий ANormalParameterPlugin : IPlugin, который бы корректно поддерживал интерфейс, но умел полиморфно вычитывать DE на основании Moniker.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: sergeyjb (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Быстродействие 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, время: 08:33.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.