Различия между клиентами веб-сервисов написаны на .net2.0 и .net4.0 - PullRequest
2 голосов
/ 21 декабря 2011

У меня проблема с использованием веб-службы Java по SSL.У меня есть два подхода, один с .net4.0 и один с .net2.0.К сожалению, подход .net4.0 не сработал.Однако более ранняя версия (2.0) работает правильно:

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Srv.Service client = new Srv.Service ();
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            string findValue = "IssuerName";
            X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false);

            X509Certificate2 cert;
            if (certsCollection.Count > 0)
            {
                cert = certsCollection[0];
                client.ClientCertificates.Add(cert); // Only in .net 2.0
            }

            client.MethodA();

        }
        catch (Exception e)
        {
            string msg = e.Message;
        }
    }
}

После этого я сделал нечто подобное в клиенте .net4.0 ( throws 'Не удалось установить безопасный канал для SSL / TLS с полномочиями{имя_сервера} 'Исключение) :

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Srv.ServiceClient srv = new Srv.ServiceClient();
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            string findValue = "IssuerName";
            X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false);

            X509Certificate2 cert;
            if (certsCollection.Count > 0)
            {
                cert = certsCollection[0];
                srv.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2();
                srv.ClientCredentials.ClientCertificate.Certificate = cert;
            }

            client.MethodA();
        }
        catch (Exception e)
        {
            string msg = e.Message;
        }
    }
}

Почему почти тот же код работает в 2.0 и выдает исключение в 4.0?Или, может быть, я делаю это неправильно во втором примере?Переопределение ServicePointManager.ServerCertificateValidationCallback не помогло ...

Почему я не могу добавить сертификат пользователя методом Добавить в 4.0, как это делается в рамках 2.0?

Редактировать: Я не использую IIS.Я использую веб-сервис, который размещен на JBoss.

Во втором примере я получаю следующее исключение:

Не удалось установить безопасный канал для SSL / TLS с полномочиями {имя_сервера}

1 Ответ

0 голосов
/ 04 сентября 2013

У меня была такая же проблема. Я мог бы вызвать веб-сервис с soapUI: soapUI Мое решение - создать веб-ссылку с помощью диалога «Добавить сервисную ссылку» (Дополнительные настройки -> Добавить веб-ссылку). См .: Веб-ссылка и сервисная ссылка и Разница между веб-ссылкой и сервисной ссылкой?

...