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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.05.2013, 14:52   #1  
Артем 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 на чистом WCF через HTTPS
Коллеги, подскажите кто пробовал реализовать подключение к CRM c использованием базовых классов WCF без использования сборок SDK? Важный момент состоит в том, что сервер доступен только по httpS.
Сервер сконфигурирован корректно, так как:
  • Все тулы соединяются с ним без вопросов
  • Соединение при использовании сборок SDK работает корректно
Предвосхищая возможные вопросы, поясняю: я разрабатываю код компонента для SSIS. Эта технология физически не умеет работать со внешними сборками (покуда они не засунуты в GAC). По этой же причине я не могу использовать файлы конфигов для настройки соединений WCF. Другие технологии не рассматриваю.


Иными словами требуется код наподобие:
X++:
            String serviceUrl = "https://server/org/XRMServices/2011/Organization.svc";

            SymmetricSecurityBindingElement security = new SymmetricSecurityBindingElement(new SspiSecurityTokenParameters());
            HttpsTransportBindingElement https = new HttpsTransportBindingElement();
            https.MaxReceivedMessageSize = 10000000;

            CustomBinding binding = new CustomBinding();
            binding.Elements.Add(security);
            binding.Elements.Add(https);

            OrganizationServiceClient client = new OrganizationServiceClient(binding, new EndpointAddress(serviceUrl));
            OrganizationRequest whoAmI = new OrganizationRequest();
            whoAmI.RequestName = "WhoAmI";

            client.Execute(whoAmI);

            client.Close();
или
X++:
            String serviceUrl = "https://server/org/XRMServices/2011/Organization.svc";

            WSHttpBinding b = new WSHttpBinding();
            b.Security.Mode = SecurityMode.Transport;
            b.MaxReceivedMessageSize = 10000000;

            OrganizationServiceClient client = new OrganizationServiceClient(b, new EndpointAddress(serviceUrl));
            OrganizationRequest whoAmI = new OrganizationRequest();
            whoAmI.RequestName = "WhoAmI";

            client.Execute(whoAmI);

            client.Close();
С тем лишь отличием, что он работает, а не выбрасывает исключение:
Цитата:
An error occurred when verifying security for the message


Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at CrmWcfTestConsoleApplication.CrmServiceReference.IOrganizationService.Execute(OrganizationRequest request)

Буду признателен за помощь всеми возможными очками репутации!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 01.06.2013, 13:05   #2  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Что подразумевается под

Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
подключение к CRM c использованием базовых классов WCF

Я знаю два способа обращения к сервису CRM (WCF)
1. Сборки SDK
2. клаcсы созданные через svcutil.exe.

Есть еще какой-то?


Через сборки SDK консул работает?
А почему вы не хотите использовать сборки?
Можно через ILMERGE собрать все в одну сборку и положить в GAC

Или я что-то упускаю?
__________________
Читайте SDK!!!
Старый 02.06.2013, 01:34   #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
Вопрос в том, что сборки SDK используют низлежащие технологии для соединения. Формально они не нужны, значит нет необходимости в различных извращениях.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 02.06.2013, 10:05   #4  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Вопрос в том, что сборки SDK используют низлежащие технологии для соединения. Формально они не нужны, значит нет необходимости в различных извращениях.
Ну если это так.
Reflector в помощь.
__________________
Читайте SDK!!!
Старый 02.06.2013, 10:16   #5  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Вернемся к началу
Для того что-бы обратить к WCF, нужно иметь в наличии на стороне request’a интерфейс.
Его можно получит несколькими способами
1. Service Reference
2. Скопировать из кода WCF сервиса. (это не ваш случай)
А потом по схеме.
например вот так
http://www.codeproject.com/Articles/...ding-a-Service
или так
http://huseyincakir.wordpress.com/20...ice-reference/

Вряд ли без интерфейса что-то получится.
__________________
Читайте SDK!!!
Старый 03.06.2013, 13:51   #6  
Артем 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
Спасибо. Использовать Service Reference я могу, проблема была только в инициализации клиента. Помог разобраться анализ конфига, создаваемого студией. Проблема была в некорректном создании Security Binding. Ниже рабочий код:
X++:
TransportSecurityBindingElement securityElement = SecurityBindingElement.CreateSspiNegotiationOverTransportBindingElement(true);
HttpsTransportBindingElement transport = new HttpsTransportBindingElement();

CustomBinding binding = new CustomBinding();
endpointBinding.Elements.Add(securityElement);
endpointBinding.Elements.Add(transport);

OrganizationServiceClient client = new OrganizationServiceClient(binding, new EndpointAddress(serviceUrl));

OrganizationRequest whoAmI = new OrganizationRequest();
whoAmI.RequestName = "WhoAmI";

client.Execute(whoAmI);
client.Close();
К сожалению, это решение из серии "работай б#$@", а не осознанное понимание того что я делаю. Очевидно, нужно более глубокое понимание протоколов связи и их реализации в WCF.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional

Последний раз редактировалось Артем Enot Грунин; 03.06.2013 в 13:55.
Старый 15.08.2013, 14:57   #7  
Артем 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
Доброго времени суток, коллеги. После установки последних .NET Security Update WCF приведенный выше код перестал работать. Расследование показало, что клиент стал требовать Identity: http://msdn.microsoft.com/en-us/library/ms733130.aspx

Данная статья рассказывает что и почему я должен настроить на своем WCF Endpoint чтобы все корректно взлетело и даже говорит как и почему: http://msdn.microsoft.com/en-us/library/bb628618.aspx.

Вопрос: каким, б@#$ь образом продолжают работать готовые утилиты и прокси классы? Дописывать в код что-то вроде:
X++:
EndpointAddress address = new EndpointAddress(new Uri(serviceUrl), EndpointIdentity.CreateSpnIdentity(@"DOMAIN\CRMAPP"), new AddressHeaderCollection());
OrganizationServiceClient client = new OrganizationServiceClient(endpointBinding, address);
Не вариант, так как это порнография какая-то указывать в настройках подключения под какой службой должен работать сервис.

Что же не так с моей конфигурацией или кодом? Знает ли кто-то как исправить ошибку?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 8 Blog bot Dynamics CRM: Blogs 1 30.04.2016 10:26
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 12 Blog bot Dynamics CRM: Blogs 0 30.01.2013 01:11
Microsoft Dynamics CRM Team Blog: The Microsoft Dynamics CRM Swiss Army Knife Blog bot Dynamics CRM: Blogs 1 19.04.2012 08:20
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 7 Blog bot Dynamics CRM: Blogs 0 27.03.2012 02:11
Microsoft Dynamics CRM Team Blog: Building Rich-Client Dashboards for Microsoft Dynamics CRM with Windows Presentation Foundation Blog bot Dynamics CRM: Blogs 1 31.03.2009 13:24

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

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

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