Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline artsb  
#1 Оставлено : 30 мая 2016 г. 15:23:28(UTC)
artsb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Добрый день!

Пытаюсь подключиться к ЕСИА. Создаю клиента. Заполняю его тестовыми данными. Пытаюсь вызвать функцию registerCertificate() и получаю исключение:
Цитата:
Источник:
System.Xml

Исключение:
Возникла ошибка при отражении "MessageData".

Внутреннее исключение:
Верхний элемент XML "MessageData" из пространства имен "http://smev.gosuslugi.ru/rev120315" ссылается на отдельные типы ConsoleApplication1.EsiaService.RegisterRequestMessageDataType и ConsoleApplication1.EsiaService.RegisterResponseMessageDataType. Используйте атрибуты XML, чтобы задать другое имя или пространство имен XML для элемента или типов.

Стек:
в System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(String elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, XmlMappingAccess access)
в System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.XmlSerializerImporter.ImportMembersMapping(XmlName elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement, Boolean rpc, Boolean isEncoded, String mappingKey)
в System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.OperationReflector.ImportMembersMapping(String elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement, Boolean rpc, String mappingKey)
в System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.OperationReflector.LoadBodyMapping(MessageDescription message, String mappingKey, MessagePartDescriptionCollection& rpcEncodedTypedMessageBodyParts)
в System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.OperationReflector.CreateMessageInfo(MessageDescription message, String key)
в System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.OperationReflector.EnsureMessageInfos()
в System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.EnsureMessageInfos()
в System.ServiceModel.Description.XmlSerializerOperationBehavior.CreateFormatter()
в System.ServiceModel.Description.XmlSerializerOperationBehavior.System.ServiceModel.Description.IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy)
в System.ServiceModel.Description.DispatcherBuilder.BindOperations(ContractDescription contract, ClientRuntime proxy, DispatchRuntime dispatch)
в System.ServiceModel.Description.DispatcherBuilder.ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime clientRuntime)
в System.ServiceModel.Description.DispatcherBuilder.BuildProxyBehavior(ServiceEndpoint serviceEndpoint, BindingParameterCollection& parameters)
в System.ServiceModel.Channels.ServiceChannelFactory.BuildChannelFactory(ServiceEndpoint serviceEndpoint, Boolean useActiveAutoClose)
в System.ServiceModel.ChannelFactory.CreateFactory()
в System.ServiceModel.ChannelFactory.OnOpening()
в System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
в System.ServiceModel.ChannelFactory.EnsureOpened()
в System.ServiceModel.ChannelFactory`1.CreateChannel(EndpointAddress address, Uri via)
в System.ServiceModel.ChannelFactory`1.CreateChannel()
в System.ServiceModel.ClientBase`1.CreateChannel()
в System.ServiceModel.ClientBase`1.CreateChannelInternal()
в System.ServiceModel.ClientBase`1.get_Channel()
в ConsoleApplication1.EsiaService.RegistrationServicePortTypeClient.ConsoleApplication1.EsiaService.RegistrationServicePortType.registerCertificate(RegisterCertificate request) в D:\ConsoleApplication1\Service References\EsiaService\Reference.cs:строка 3345
в ConsoleApplication1.EsiaService.RegistrationServicePortTypeClient.registerCertificate(HeaderType& Header, MessageType& Message, MessageDataType& MessageData) в D:\ConsoleApplication1\Service References\EsiaService\Reference.cs:строка 3353
в ConsoleApplication1.Program.registerCertificate() в D:\ConsoleApplication1\Program.cs:строка 153


Добраться до MessageData и задать ему другое пространство имен, или выполнить другую манипуляцию, не представляется возможным. С другой стороны, в этом не должно быть необходимости, так как запрос, сформированный вручную, отправляется нормально. Думаю, что проблема связана непосредственно с VisualStudio.

У кого-нибудь есть идеи, как можно побороть эту ошибку?
Спасибо!
Offline e3w4rty  
#2 Оставлено : 12 октября 2016 г. 8:11:47(UTC)
e3w4rty

Статус: Участник

Группы: Участники
Зарегистрирован: 13.11.2015(UTC)
Сообщений: 10
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Вам удалось решить данную проблему?
Offline artsb  
#3 Оставлено : 12 октября 2016 г. 9:15:06(UTC)
artsb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: e3w4rty Перейти к цитате
Вам удалось решить данную проблему?

Добрый день! Да, решить удалось. Все оказалось не так просто, как хотелось бы. WCF не умеет формировать подпись в формате СМЭВ.
Необходимую информацию нашел вот тут:
http://www.cryptopro.ru/...aspx?g=posts&m=25026
https://www.cryptopro.ru...olzovaniem-kriptopro-net

В итоге, алгоритм действий такой:
1. Формируем необходимый XML
2. Подписываем с помощью функций описанных выше
3. Отправляем запрос через HttpWebRequest
Код:
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(/*Адрес сервиса*/);
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Headers.Add("SOAPAction", /*имя функции*/);
            request.ContentType = "text/xml;charset=\"utf-8\"";
            request.Method = "POST";
thanks 1 пользователь поблагодарил artsb за этот пост.
e3w4rty оставлено 12.10.2016(UTC)
Offline petr  
#4 Оставлено : 12 октября 2016 г. 16:59:44(UTC)
petr

Статус: Участник

Группы: Участники
Зарегистрирован: 09.10.2015(UTC)
Сообщений: 10

аналогичная проблема
Offline petr  
#5 Оставлено : 27 октября 2016 г. 14:58:30(UTC)
petr

Статус: Участник

Группы: Участники
Зарегистрирован: 09.10.2015(UTC)
Сообщений: 10

Пробую формировать необходимый xml вручную.
Подскажите, в Вашем примере /*имя функции*/ что указываете ?

Offline artsb  
#6 Оставлено : 22 ноября 2016 г. 9:28:17(UTC)
artsb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: petr Перейти к цитате
Пробую формировать необходимый xml вручную.
Подскажите, в Вашем примере /*имя функции*/ что указываете ?


Тут нужно писать имя функции в виде: "http://mks.esia.rstyle.ru/RegistrationServicePortType/RegisterCertificate"
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.