Как реализовать асинхронные вызовы SOAP в клиентском приложении?
Я работал над проектом, где я получаю данные из базы данных, используя функции SOAP.
Сначала я загрузил файл.wsdl из версии базы данных для разработчиков в Visual Studio в качестве справочника услуг.
using ServRef = MyApp.DBServiceReference;
и был в состоянии получить отдельные записи из мыльного вызова
ServRef.FBTservice fbtService = new ServRef.FBTservice();
ServRef.BugStruct singleBug = fbtService.getId(uniqueBugId, username, password);
а также получить полный список вопросов
ServRef.FBTservice fbtService = new ServRef.FBTservice();
ServRef.FilterStruct filter = new ServRef.FilterStruct();
filter.mColumn = new string[] { "1", "3", "12" };
ServRef.BugStruct[] bugArr = fbtService.getBugList(filter, username, password);
Этот метод отлично работает для нашей базы данных разработки, но поскольку наша производственная версия требует аутентификации через менеджер доступа, мне пришлось искать другой метод.
Чтобы это работало в нашей производственной среде, мне нужно было найти способ аутентификации в диспетчере доступа, собрать куки-файлы из процесса аутентификации, а затем прикрепить эти куки-файлы к моему вызову SOAP.
Я не смог сделать это с помощью моей ссылки на службу, но обнаружил, что, загрузив мой.wsdl в качестве веб-ссылки вместо ссылки на службу,
using WebRef = MyApp.DBWebReference;
Я мог прикрепить свои куки и получить список проблем из рабочей версии, например, так
WebRef.FBTservice fbtService = new WebRef.FBTservice();
fbtService.CookieContainer = this.authCookieContainer;
WebRef.FilterStruct filter = new WebRef.FilterStruct();
filter.mColumn = new string[] { "1", "3", "12" };
WebRef.BugStruct[] bugArr = fbtService.getBugList(filter, username, password);
Теперь к моей проблеме / вопросу. Когда я загрузил свой.wsdl в качестве веб-ссылки, мне показалось, что у меня есть доступ к некоторым другим методам и переменным, а именно getBugListAsync() и getBugAsync(). Вот соответствующие объекты из веб-ссылки, которые я получил, просмотрев в Обозревателе объектов:
public void getBugListAsync(FilterStruct filterStruct, string loginid, string password)
public void getBugListAsync(FilterStruct filterStruct, string loginid, string password, object userState)
private void OngetBugListOperationCompleted(object arg)
private System.Threading.SendOrPostCallback getBugListOperationCompleted
public event getBugListCompletedEventHandler getBugListCompleted
Как бы я пошел о реализации этих вызовов? Я работал с событиями и обработчиками событий, но только для того, чтобы исследовать онлайн, как обрабатывать простые события, и использовать примеры, чтобы провести меня через него.