|  31.05.2013, 14:52 | #1 | 
| Moderator | Подключение к CRM на чистом WCF через HTTPS 
			
			Коллеги, подскажите кто пробовал реализовать подключение к CRM c использованием базовых классов WCF без использования сборок SDK? Важный момент состоит в том, что сервер доступен только по httpS. Сервер сконфигурирован корректно, так как: 
 Иными словами требуется код наподобие: 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 | 
| Участник | 
			
			Что подразумевается под  Я знаю два способа обращения к сервису CRM (WCF) 1. Сборки SDK 2. клаcсы созданные через svcutil.exe. Есть еще какой-то? Через сборки SDK консул работает? А почему вы не хотите использовать сборки? Можно через ILMERGE собрать все в одну сборку и положить в GAC Или я что-то упускаю? 
				__________________ Читайте SDK!!! | 
|  | 
|  02.06.2013, 01:34 | #3 | 
| Moderator | 
			
			Вопрос в том, что сборки SDK используют низлежащие технологии для соединения. Формально они не нужны, значит нет необходимости в различных извращениях.
		 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | 
|  02.06.2013, 10:05 | #4 | 
| Участник | Цитата: Reflector в помощь.   
				__________________ Читайте SDK!!! | 
|  | 
|  02.06.2013, 10:16 | #5 | 
| Участник | 
			
			Вернемся к началу Для того что-бы обратить к 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 | 
| Moderator | 
			
			Спасибо. Использовать 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(); 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 03.06.2013 в 13:55. | 
|  | 
|  15.08.2013, 14:57 | #7 | 
| Moderator | 
			
			Доброго времени суток, коллеги. После установки последних .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 | 
|  | 
|  | 
| 
 |