Невозможно сгенерировать запрос utf-8 в ядре .net при использовании wcf с базовой связью транспорта http с проверкой подлинности сертификата. - PullRequest
0 голосов
/ 26 июня 2019

Я использую wsdl, описанный как:

<wsdl:binding name="PassengerConformance_v1Binding"
    type="tns:PassengerConformanceAuthenticationPortType">
    <soap:binding style="document"
        transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="identify">
    </wsdl:operation>
</wsdl:binding>

Но генерируемый запрос - это UTF16, которым сервер хочет быть utf-8. Так выглядит мой код

 var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
 {
     Security = new BasicHttpSecurity
     {
         Mode = BasicHttpSecurityMode.Transport,
         Transport = new HttpTransportSecurity
         {
             ClientCredentialType = HttpClientCredentialType.Digest
         }
     }
 };     
 var address = new EndpointAddress(dcsServiceConfiguration.Url);     
 var channel = new ChannelFactory<T>(binding, address);     
 channel.Credentials.HttpDigest.ClientCredential =
      new NetworkCredential(username, Password);     
 var buildDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 var filePath = buildDir + @"\ClientCert.pfx";     
 channel.Credentials.ClientCertificate.Certificate =
     new X509Certificate2(filePath, "password", X509KeyStorageFlags.MachineKeySet);  

 binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;     
 return channel;

Я понимаю, что значение textEncoding BasicHttpBinding по умолчанию - utf-8, но все же, когда я проверяю инспектор сообщений, оно становится utf-16.

Я заметил, что когда я реплицировал этот код в .net 7.2фреймворковое консольное приложение, тега xml не было.который все еще работает для меня, пожалуйста, помогите.

...