C # Объект доступен только для чтения при назначении сертификата - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь вызвать веб-сервис из файла WSDL.

после добавления WSDL в качестве служебной ссылки и указания местоположения файла WSDL на моем компьютере.

используя код, я попытался присвоить сертификат веб-службе, например:

   NeqatyService.NeqatyWSAPIPortTypeClient mPortType = new NeqatyWSAPIPortTypeClient();

  Byte[] rawData = File.ReadAllBytes(@"c:\cert.p12");
                String cert64 = Convert.ToBase64String(rawData);
                X509Certificate2 certificates = new X509Certificate2(rawData, "pass", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.UserKeySet);
                mPortType.ClientCredentials.ClientCertificate.Certificate = certificates;

отладчик выдает ошибку в этой строке:

mPortType.ClientCredentials.ClientCertificate.Certificate = certificates;

говорит, что: Объект только для чтения

Хочу заметить, что раньше я звонил в веб-сервис, используя SOAPUI. предоставив сертификат и пароль и все заработало.

Кто-нибудь может мне помочь с этим.

1 Ответ

0 голосов
/ 06 июня 2018

Попробуйте изменить значение messageEncoding на «Mtom» в конфигурации привязки.Вот пример конфигурации, которую я использовал недавно.Я получал эту ошибку, когда было установлено значение «Текст».

            <binding name="AWDProcessingServiceBinding" closeTimeout="00:01:00"
                openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="655360" maxBufferPoolSize="524288" maxReceivedMessageSize="655360"
                messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="Transport">
                    <transport clientCredentialType="Certificate" proxyCredentialType="Basic"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
...