我一直致力于一个项目,我使用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
我将如何实施这些电话?我曾与事件和事件处理程序一起工作,但仅限于在线研究如何处理简单事件,并使用示例来指导我完成它。