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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline petr  
#1 Оставлено : 12 октября 2016 г. 16:55:35(UTC)
petr

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

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

Добрый день.
При подключении к ЕСИА при попытке зарегистрировать сертификат
Код:
var messageData = new MessageDataType{ AppData = new AppDataType { Any = regXml } };
var registerInfo = new RegisterCertificate(null, GetMessageType(), messageData);
var smevClient = GetSmevClient(clientCert, serverCert);
var resp = ((RegistrationServicePortType) smevClient).registerCertificate(registerInfo);


получаем
Цитата:

System.InvalidOperationException: Возникла ошибка при отражении "MessageData". ---> System.InvalidOperationException: Верхний элемент XML "MessageData" из пространства имен "http://smev.gosuslugi.ru/rev120315" ссылается на отдельные типы RegCertificate.RegistrationService.RegisterRequestMessageDataType и RegCertificate.RegistrationService.RegisterResponseMessageDataType. Используйте атрибуты XML, чтобы задать другое имя или пространство имен XML для элемента или типов.
в System.Xml.Serialization.XmlReflectionImporter.ReconcileAccessor(Accessor accessor, NameTable accessors)
в System.Xml.Serialization.XmlReflectionImporter.ReconcileLocalAccessor(ElementAccessor accessor, String ns)
в System.Xml.Serialization.XmlReflectionImporter.ImportAccessorMapping(MemberMapping accessor, FieldModel model, XmlAttributes a, String ns, Type choiceIdentifierType, Boolean rpc, Boolean openModel, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportMemberMapping(XmlReflectionMember xmlReflectionMember, String ns, XmlReflectionMember[] xmlReflectionMembers, Boolean rpc, Boolean openModel, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter)
--- Конец трассировки внутреннего стека исключений ---
в 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()
в RegCertificate.RegistrationService.RegistrationServicePortTypeClient.RegCertificate.RegistrationService.RegistrationServicePortType.registerCertificate(RegisterCertificate request) в C:\TfsAgents\TfsAgent1\agent\_work\58\s\RegCertificateLib\Service References\RegistrationService\Reference.cs:строка 4265
в RegCertificate.SmevLib.RegisterCertificate(Certificate certificate, X509Certificate2 clientCert, X509Certificate2 serverCert) в C:\TfsAgents\TfsAgent1\agent\_work\58\s\RegCertificateLib\RegCertificate.cs:строка 123
в RegCertificate.Helper.SmevHelper.RegisterCertificate(Certificate certificate) в C:\WORK_GIT\SMEV_WinForms\RegCertificate


на классах стоят Xml атрибуты
Код:

	/// <summary>
	/// Класс, описывающий сертификат
	/// </summary>
	[Serializable]
	[XmlType(Namespace = "http://mks.esia.rstyle.ru/")]
	[XmlRoot(ElementName = "esia")]
	public class Certificate
	{
		/// <summary>
		/// Пространство имен
		/// </summary>
		[XmlNamespaceDeclarations]
		public XmlSerializerNamespaces Xmlns;

		/// <summary>
		/// Серийный номер сертификата ключа КЭП
		/// </summary>
		[XmlElement(ElementName = "serialNumber", Namespace = "http://mks.esia.rstyle.ru/")]
		public string SerialNumber { get; set; }

		/// <summary>
		/// Имя организации – издателя сертификата ключа КЭП
		/// </summary>
		[XmlElement(ElementName = "issuerOrgName", Namespace = "http://mks.esia.rstyle.ru/")]
		public string IssuerOrgName { get; set; }

                ...

                /// <summary>
		/// ctor
		/// </summary>
		public Certificate()
		{
			Xmlns = new XmlSerializerNamespaces();
			Xmlns.Add("esia", "http://mks.esia.rstyle.ru/");
		}
	}


Формировать запрос вручную и отправлять через HttpWebRequest согласно теме это не решение.
Хотелось бы довести работу с WCF сервисом до ума.
Причем ранее мы уже использовали WCF сервис и отправка в СМЭВ проходила успешно. Пока не обновили сам сервис.
У кого есть какие предложения ?

Offline velikoros  
#2 Оставлено : 13 октября 2016 г. 10:24:22(UTC)
velikoros

Статус: Новичок

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

WCF вообще со СМЭВ работать перестало. Раньше работало, а теперь нет. Берем формируем сообщение без вложения, посылаем на адрес СМЭВ, пишет, что превышено время ожидания. Увеличение времени ожидания в binding ничего не дает. Если же формировать сообщение с вложением, то вообще соединение разрывается по неизвестной причине. Тестируем подписанное сообщение на сайте smev.gosuslugi.ru (раздел "Инструменты разработки сервисов"). Пишет, что все верно. Сообщение - ОК. Теперь делаем следующий трюк. Вкладываем это сообщение в программу SOAPUI 5.2.1, посылаем на сервис, все проходит, возвращается тикет.
Надо еще попробовать через HttpWebRequest, но не знаю как это сделать, так как не в теме.
Делал через ChannelFactory:
EndpointAddress address = new EndpointAddress("/Адрес сервиса/");
BasicHttpBinding binding = new BasicHttpBinding();
IChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding,address);
IRequestChannel channel = factory.CreateChannel(address);
channel.Open();
...
XmlReader reader_inp = XmlReader.Create("c:/requests/request_signed.xml");
Message request = Message.CreateMessage(reader_inp, 100000, MessageVersion.Soap11);
Message reply = channel.Request(request);
...
Может нужна другая версия VisualStudio? У меня VS2010.
Интересно как в HttpWebRequest задать binding или оно вообще не нужно?
То ли надо обновления Windows установить, но они не скачиваются, вываливается ошибка, возможно из-за установленной версии КриптоПро (3.6 sp 4). А с версией КриптоПро 4.0 вообще даже подписание сообщений не работает.

Отредактировано пользователем 13 октября 2016 г. 11:19:37(UTC)  | Причина: Не указана

Offline petr  
#3 Оставлено : 14 октября 2016 г. 15:04:51(UTC)
petr

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

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

СМЭВ (smev@gosuslugi.ru) на вопрос о помощи отвечает:
Цитата:

Служба поддержки системы межведомственного электронного взаимодействия не дает консультаций по настройке и использованию ПО на стороне Поставщиков и Потребителей.

Так а куда обращаться за помощью? Разве это не их WCF сервис
Кто сталкивался с подобным - напишите как боролись
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.