@OwDafuq

WCF Client & Net Core, откуда берется кодировка и как её убрать?

Доброго времени суток.
Пытаюсь сделать запрос на сайт ГИС ЖКХ через их WCF сервис.
Клиент сгенерирован через .wsdl файл от ГИСа ЖКХ, каждый клиент (их несколько для разных сервисов) настраивается через 1 фабрику:
var binding = new BasicHttpBinding
{
	SendTimeout = TimeSpan.FromSeconds(20),
	MaxReceivedMessageSize = int.MaxValue,
	Security = new BasicHttpSecurity
	{
		Mode = BasicHttpSecurityMode.TransportCredentialOnly,
		Transport = new HttpTransportSecurity
		{
			ClientCredentialType = HttpClientCredentialType.Basic,
		}
	},
};

var point = new EndpointAddress(endpoint);
var client = (T)Activator.CreateInstance(type, args: new object[] { binding, point })!; //см. конструктор для любого клиента

var credentials = new ClientCredentials();
credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
credentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
credentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindByThumbprint, options.Thumbprint);

client.Endpoint.EndpointBehaviors.Clear();
client.Endpoint.EndpointBehaviors.Add(credentials);
client.Endpoint.EndpointBehaviors.Add(behavior);

client.ClientCredentials.UserName.UserName = gisOptions.UserName;
client.ClientCredentials.UserName.Password = gisOptions.Password;


где T : ClientBase<TClientInterface>
а TClientInterface : class


Настройки взяты с app.config проекта на .net framework, который отлично и без ошибок отправляет этот же запрос (да, ошибка прилетает 400 (bad request)).
Но в проекте на net framework'e XML запроса создается без первой строчки "<?xml version="1.0" encoding="utf-16"?>", которая появляется на .net core приложении.
Вопрос: откуда она берется, как её убрать? Из-за неё, скорее всего, 400 код и прилетает, т.к. ГИС ЖКХ, скорее всего, не принимает utf-16, а только utf-8.

XML, который генерируется на .net framework'e:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:getState</Action>
    <h:RequestHeader xmlns="http://dom.gosuslugi.ru/schema/integration/base/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://dom.gosuslugi.ru/schema/integration/base/">
      <Date>2023-01-11T13:14:09.1430533+03:00</Date>
      <MessageGUID>0b31d9b6-c9d0-4901-bdc8-e0b579ae5fd5</MessageGUID>
      <orgPPAGUID>cc59adc5-7695-4127-bf4a-a03a0d56d0f3</orgPPAGUID>
      <IsOperatorSignature>true</IsOperatorSignature>
    </h:RequestHeader>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <getStateRequest xmlns="http://dom.gosuslugi.ru/schema/integration/base/">
      <MessageGUID>c42bffcc-d18e-404e-9279-eea6e1aa0ee5</MessageGUID>
    </getStateRequest>
  </s:Body>
</s:Envelope>


XML, который генерируется на .net core:
<?xml version="1.0" encoding="utf-16"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:getState</Action>
    <h:RequestHeader xmlns="http://dom.gosuslugi.ru/schema/integration/base/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://dom.gosuslugi.ru/schema/integration/base/">
      <Date>2023-01-11T13:12:51.732914+03:00</Date>
      <MessageGUID>c9b085f0-7f1c-43f6-a986-42b3c8091e01</MessageGUID>
      <orgPPAGUID>2fb1e870-488e-4dea-9ba1-20c8ba9676ae</orgPPAGUID>
      <IsOperatorSignature>true</IsOperatorSignature>
    </h:RequestHeader>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <getStateRequest xmlns="http://dom.gosuslugi.ru/schema/integration/base/">
      <MessageGUID>f7abf508-ba73-44e8-a759-a13f894913a2</MessageGUID>
    </getStateRequest>
  </s:Body>
</s:Envelope>


Явно видно, что разница только в первой строчке, каким образом её можно отрезать и выкинуть из запроса вообще? В проекте на .net framework нет никаких настроек XmlWriterSettings, где есть св-во OmitXmlDeclaration. Если можно через него как-то это сделать, то куда и где его объявлять и подсовывать?

ps. - св-во Encoding у BasicHttpBinding ни на что не влияет, всё так же utf-16 остается.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@OwDafuq Автор вопроса
Ошибка была в URL адресе сервиса, из-за чего он кидал 400 код, очень и очень глупая ошибка :)
Вопрос можно закрывать
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы