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

C# 如何在客户端应用程序中实现异步SOAP调用?,c#,asynchronous,soap,wsdl,asmx,C#,Asynchronous,Soap,Wsdl,Asmx,我一直在从事一个项目,在这个项目中,我使用SOAP函数从数据库中获取数据 最初,我将数据库的开发版本中的.wsdl文件作为服务引用加载到VisualStudio中 using ServRef = MyApp.DBServiceReference; 并且能够从soap调用中检索单个条目 ServRef.FBTservice fbtService = new ServRef.FBTservice(); ServRef.BugStruct singleBug = fbtService

我一直在从事一个项目,在这个项目中,我使用SOAP函数从数据库中获取数据

最初,我将数据库的开发版本中的.wsdl文件作为服务引用加载到VisualStudio中

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);
这种方法适用于我们的开发数据库,但因为我们的生产版本需要通过access manager进行身份验证,所以我不得不找到一种不同的方法

为了让它在我们的生产环境中发挥作用,我需要找到一种方法,通过access manager进行身份验证,从身份验证过程中收集cookie,然后将这些cookie附加到我的SOAP调用

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

using WebRef = MyApp.DBWebReference;
我可以附上我的cookies,从制作版中抓取问题列表,就像这样

    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参考中的相关对象:

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

我将如何执行这些调用?我曾使用过事件和事件处理程序,但仅限于在线研究如何处理简单事件,并使用示例指导我解决问题。

您以错误的方式解决了问题。与其回到传统的(即不受支持的)ASMX技术,您只需来到这里,询问如何将您的cookie附加到WCF服务引用。我不久前尝试过这样做,但我认为我的部分问题是我不知道我在寻找什么。这是我第一次使用WCF,所以这是一个相当多的尝试和错误。你能给我指出正确的方向吗?另外,如果我上传了我正在使用的.wsdl文件,这会有助于提供更多的上下文吗?不,问题是你的防火墙。您需要对其进行编程,以允许SOAP通信通过。这种关于饼干的胡说八道是一种恶作剧,而且很糟糕。在任何情况下,您是如何进行身份验证和获取cookies的?我应该首先说,这是供公司内部使用的,而不是向任何客户销售此解决方案。目前,该程序在客户机上运行。使用Fiddler,我捕获了登录系统时发生的请求/响应。当您尝试转到系统地址时,它会将您重定向到NetIQ访问管理器页面,您可以在其中输入凭据。然后通过电子邮件发送OTP,然后用户输入。我提示用户输入凭据,然后重新创建HttpWebRequest。然后我提示用户输入OTP。我使用这些请求/响应中的CookieContainer。