如何在客户端应用程序中实现异步SOAP调用?

时间:2015-06-18 16:15:01

标签: c# asynchronous soap wsdl asmx

我一直致力于一个项目,我使用SOAP函数从数据库中获取数据。

最初,我将.wsdl文件从开发版本的数据库加载到Visual Studio作为服务参考

using ServRef = MyApp.DBServiceReference;

并且能够从soap调用中检索单个条目

    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);

此方法适用于我们的开发数据库,​​但由于我们的生产版本需要通过访问管理器进行身份验证,因此我必须找到不同的方法。

为了使这个工作适用于我们的生产环境,我需要找到一种方法来验证访问管理器,从身份验证过程中收集cookie,然后将这些cookie附加到我的SOAP调用中。

我无法使用我的服务参考执行此操作,但发现通过将我的.wsdl加载为Web引用而不是服务引用,

using WebRef = MyApp.DBWebReference;

我可以附上我的Cookie并从生产版本中获取问题列表,就像这样

    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加载为Web引用时,我似乎可以访问更多的方法和变量,即getBugListAsync()和getBugAsync()。以下是我在对象浏览器中查看的Web Reference中的相关对象:

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

我将如何实施这些电话?我曾与事件和事件处理程序一起工作,但仅限于在线研究如何处理简单事件,并使用示例来指导我完成它。

0 个答案:

没有答案