Рейтинг:
2
Kornfeld Eliyahu Peter
Прежде всего...- Не думаю .Net может работать с файлами следующих как источник сертификатов... вам нужны pfx-файлы...
Смотрите здесь один из вариантов, как конвертировать между ними или подключить поставщика устройства для одного... Создайте PKCS12 (. pfx / .p12) из хранилища ключей JKS / JAVA[^]
Что касается WSDL...В тот момент, когда вы упоминаемый[^] VS создал класс-оболочку, используя имя, которое вы присвоили ссылке...
Используя это имя класса, вы можете создать объект и вызвать все открытые методы веб-сервера...
WebReference service = new WebReference();
X509Certificate2 cert = new X509Certificate2();
cert.Import("client_cert.pfx", "[the password]", DefaultKeySet);
service.Url = "[the actual server address]";
service.ClientCertificates.Add(cert);
service.Method();
(Огорченный. Просто понял, что ты просил. VB.NET... Разница только в синтаксисе языка...)
[РЕДАКТИРОВАТЬ]
Согласно Вашим комментариям...
Вы можете ссылаться на WSDL двумя способами: веб-ссылка (более старая) и ссылка на службу (более новая)... В каждом случае есть разные способы установить целевой адрес...
Для Веб-Ссылки:
WebReference.OSAccessService oA = new WebReference.OSAccessService( );
oA.Url = "address-goes-here";
Для Справки По Обслуживанию:
ServiceReference.OSAccessClient oB = new ServiceReference.OSAccessClient( );
oB.Endpoint.Address = new System.ServiceModel.EndpointAddress( "address-goes-here" );
sampos
Здравствуйте, спасибо за быстрый ответ.
Я попробовал ваше решение проблемы "service. url" и " service.Значении clientcertificates.Add (cert)" of web reference is recongized, возможно ли, что что-то не так с файлом WSDL, который они мне дали?
Kornfeld Eliyahu Peter
Вряд ли... Может быть, то, как вы ссылались на него, неправильно?
Можем ли мы указать нам на WSDL? Он публичный?
sampos
Нет, это локальный файл WSDL, который они мне дали. Есть ли у меня возможность отправить вам файл в частном порядке?
Спасибо
sampos
Привет еще раз, это ссылка на файл: https://dl.dropboxusercontent.com/u/18176784/Client.wsdl
Надеюсь, вы сможете проверить это и дать обратную связь о том, что я делаю не так.
Спасибо снова.
Kornfeld Eliyahu Peter
WSDL в полном порядке... Похоже, вы использовали его в качестве ссылки на сервис, в то время как я использовал его в качестве веб-ссылки...
Увидеть обновленные ответ для различия...
sampos
Большое спасибо, сэр, еще один вопрос, с Вашими указаниями, я прибыл с этим кодом:
X509certificate2 с сертификата = новый x509certificate2 с();
сертификат.Импорт ("client_cert.pfx", "[пароль]", X509KeyStorageFlags.DefaultKeySet);
Значение servicereference1.OSAccessClient oB = new ServiceReference1.OSAccessClient( );
X509store store=новый X509Store(имя магазина.Мой, Расположение Магазина.Текущий пользователь) ;
магазин.Open (OpenFlags.Чтение и запись);
Обь.Конечную точку.Адрес = новая система.Сервис-модель.EndpointAddress ("адрес-идет-сюда" );
магазин.Добавить (сертификат);
Правильно ли это?
затем, чтобы вызвать функцию WSDl, я просто использую что-то вроде oB.AddONT ()?
Kornfeld Eliyahu Peter
Да и еще раз да.
Это кажется правильным, и вы просто вызываете метод-член, остальное делает ссылочная оболочка...
sampos
Большое спасибо. Кстати, когда я вызывал метод члена типа oB.AddONT (OS_Header), что означает/делает параметр OS_Header? Что я туда кладу?
sampos
Привет, извините, у меня все еще есть проблема с этим, строка давала мне ошибку "ССЫЛКА на объект не установлена на экземпляр объекта".:
Dim cert как новый X509Certificate2
сертификат.Импорт ("client.p12", "Changeme_123", X509KeyStorageFlags.DefaultKeySet)
Dim oB как новый ServiceReference1.OSAccessClient
Dim store As X509Store = New X509Store(StoreName.Мой, Расположение Магазина.Текущий пользователь)
магазин.Open (OpenFlags.Чтение и запись)
Обь.Конечную точку.Адрес = Новая Система.Сервис-модель.Адрес endpointaddress("http://1.1.1.2:55555/wsdl")
магазин.Добавить (сертификат)
Dim AX как ServiceReference1.ADDONT_T = новое значение servicereference1.ADDONT_T
Топор.объект.Дев = "dfgdfgdf" ------> Это где я получаю сообщение об ошибке "объекта не задана ссылка на экземпляр объекта."
Обь.ADDONT("", ТОПОР)
Обь.Рядом()
Я думаю, что AX должен инициализировать соединение, но я просто не знаю, как это сделать?