Статус: Участник
Группы: Участники
Зарегистрирован: 05.08.2014(UTC) Сообщений: 12
Поблагодарили: 2 раз в 2 постах
|
При попытке отправить пакет на тестовую среду ГИС ГМП 2.0 возникает исключение: "Неопознанный набор charSet "ISO-8859-1" в contentType." Код работы с сервисом взят из примеров КриптоПро.NET SDK. Причем похожий код (и та-же библиотека) успешно работает на тестовой и боевой среде ГИС ГМП 1.16.x. Подскажите, как указать сервису кодировку UTF-8? Текст XML-запроса qry_err.xml (15kb) загружен 5 раз(а).Версия КриптоПро.NET - 1.0.4863. C версией 1.0.6397 не работает даже с ГИС ГМП 1.16.x. - exception при проверке сертификатов. Код:
SenderProvidedRequestData sprd = new SenderProvidedRequestData();
//
// .....
//
SMEVMessageExchangePortTypeClient service = new SMEVMessageExchangePortTypeClient("SmevGISGMPServiceSOAP");
// Клиентский сертификат подписи
service.ClientCredentials.ClientCertificate.Certificate = clientCert;
/// Серверный сертификат подписи
service.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
/// С проверками сертификатов всё туго. отключаем их.
service.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
service.ClientCredentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
string serverCommonName = serverCert.GetNameInfo(X509NameType.SimpleName, false);
/// DNS имя не совпадает с CommonName из сертификата сервера. Поэтому явно задаем доверие.
EndpointAddress myEndpointAddr = new EndpointAddress(new Uri(ProgSet.ServerEndPoint),
EndpointIdentity.CreateDnsIdentity(
serverCommonName));
service.Endpoint.Address = myEndpointAddr;
/// Настраиваем привязку. Подменяем кодировщик на собственный,
/// настраиваем SecurityBindingElement
CustomBinding binding = new CustomBinding(service.Endpoint.Binding);
SMEVMessageEncodingBindingElement textBindingElement = new SMEVMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap11, AddressingVersion.None),
};
binding.Elements.Remove<TextMessageEncodingBindingElement>();
binding.Elements.Insert(0, textBindingElement);
/// Не включаем метку времени в заголовок Security
AsymmetricSecurityBindingElement asb = binding.Elements.Find<AsymmetricSecurityBindingElement>();
asb.IncludeTimestamp = false;
asb.DefaultAlgorithmSuite = GostAlgorithmSuite.BasicGostObsolete;
/// Говорим WCF, что в сообщении от СМЭВ не нужно искать метку времени и nonce.
asb.LocalClientSettings.DetectReplays = false;
asb.EnableUnsecuredResponse = true;
/// Устанавливаем модифицированную привязку.
service.Endpoint.Binding = binding;
/// Говорим WCF, что требуется только подпись сообщения.
/// По-умолчанию задано шифрование + подпись.
service.ChannelFactory.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;
XmlElement SMEVSig;
service.SendRequest(sprd, null/*AttachmentContentList*/, null/*CallerInformationSystemSignature*/, out SMEVSig);
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.08.2014(UTC) Сообщений: 12
Поблагодарили: 2 раз в 2 постах
|
пришлось поправить код, указав кодировку принудительно SMEVMessageEncodingBindingElementExtensionElement.cs Код:
namespace SmevServiceEncoder
{
public class SMEVTextMessageEncoder : MessageEncoder
{
...
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
...
return _innerEncoder.ReadMessage(buffer, bufferManager, /*contentType*/ "text/xml;charset=UTF-8");
}
}
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close