Показать сообщение отдельно
Старый 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