У меня довольно устаревшая сборка, которую я использую для связи через SOAP с программным обеспечением, которое пишет моя компания. Поскольку это стоит прямо сейчас, обновление сборки не является вариантом, поэтому, пожалуйста, не предлагайте это.Использование IHeaderHandler с wcf
В предыдущих итерациях нормальный способ связи выполнялся с использованием MS Soap Toolkit 3.0 (MSSOAPLIB30). Вы бы назвали метод login() сборки, и он вернет экземпляр, полученный из IHeaderHandler, который затем будет назначен экземпляру клиента мыла. Please refer here for more information on how this worked.
Ну, я хотел бы использовать более современный подход к общению с этой веб-службой. До сих пор я мог успешно ссылаться на веб-службу с помощью wcf, однако я столкнулся с проблемами, выясняя, как свести экземпляр IHeaderHandler к тому, что может понять прокси-сервер wcf. Другими словами, я пытаюсь объединить два поколения технологий вместе. Я проверил, что использование метода, упомянутого в ссылке выше, действительно работает. Теперь просто нужно выяснить, как сделать этот экземпляр IHeaderHandler полезным.
Вот несколько примеров коды для старого подхода:
string strBasicWsdlUrl = "http://" + _strDeviceName + "/MetasysIII/WS/TimeManagement/TimeService.asmx";
object[] Parameters1 = new object[] { strBasicWsdlUrl, "", "", "" };
bool[] Parameters2 = new bool[] { true, true, true, true };
TSClient = Activator.CreateInstance(Type.GetTypeFromProgID("MSSOAP.SoapClient30"));
NewLateBinding.LateGet(TSClient, null, "MSSoapInit", Parameters1, null, null, Parameters2);
Parameters1 = new object[] { NewLateBinding.LateGet(JCISecurity, null, "HeaderHandler", new object[0], null, null, null) };
NewLateBinding.LateSet(TSClient, null, "HeaderHandler", Parameters1, null, null);
Как вы можете видеть, новый экземпляр клиента мыльного инициализируются с файлом WSDL и затем HeaderHandler атрибута из экземпляра JCISecurity (который это вышеупомянутая сборка, которую я использую для аутентификации с помощью программного обеспечения), которая получена из IHeaderHandler, передается в HeaderHandler клиента soap. Затем этот процесс гарантирует, что все будущие запросы от мыльного клиента будут прикреплены к этому заголовку.
Важно также отметить, что класс прокси, созданный из WCF для моей веб-службы, имеет два интересных параметра, связанных со всеми веб-методами: EncryptedCertificate и LoginResult. Я предполагаю, что эти значения будут существовать в экземпляре IHeaderHandler, поскольку исходная документация службы не ссылается на эти два параметра. Однако я не могу проверить, что это так, потому что я еще не могу понять, как получить доступ к контенту, встроенному в экземпляр IHeaderHandler.
Как показано на рисунке, на данный момент я вижу два возможных решения: укажите способ сделать класс прокси-сервера WCF напрямую использующим экземпляр IHeaderHandler, сгенерированный с помощью сборки, или выяснить способ извлечения необходимой информации из IHeaderHandler экземпляр и использовать Message Inspectors для ручной привязки данных к заголовкам.
В отличие от форумов, мы не используем «Спасибо» или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts) –