【问题标题】:Accessing Asynchronous Web Service Methods in C#在 C# 中访问异步 Web 服务方法
【发布时间】:2012-08-03 21:34:12
【问题描述】:

我正在尝试非常简单地对 Web 服务方法进行异步调用并获取返回值。我在 Visual Studio 2010 中使用它的服务引用代理类功能来执行此操作。奇怪的是,这方面的资源少之又少,而且大部分都已经过时,使用 Begin[Method] 和 End[Method] 而不是 [Method]Async 和 [Method]Completed。

我正在尝试关注这个:http://msdn.microsoft.com/en-us/library/55xs7d7f(v=vs.80).aspx。当引发表示方法已返回的事件时,我总是得到 null 结果。

MyWebServiceClient client = new MyWebServiceClient();
client.webMethodCompleted += 
    new System.EventHandler<webMethodCompletedArgs>(Callback);
client.webMethodAsync();

在代码后面,Callback 方法:

void Callback(object sender, webMethodCompletedArgs args)
{
    string data = args.Result;
}

问题是,如果我运行这段代码,args.Result 将永远是null。我已经使用同步接口测试了 Web 服务,它工作得很好,所以我知道它不是 Web 服务。我是这个东西的新手,所以我可能做错了一些非常简单的事情。

【问题讨论】:

  • 我不懂 WinPhone 开发,但是您使用的是旧的 ASMX 技术来访问服务(Web 参考)。您应该尝试改用服务引用。
  • 感谢您的回复,约翰。我最初是通过 Visual Studio 中的“服务引用”文件夹添加服务的。我在任何地方都没有看到“Web References”文件夹。在添加不使用 ASMX 技术的引用时,我是否遗漏了什么,或者我应该做些什么?
  • 是的,您应该简单地使用“添加服务引用”并完全忽略网络引用。
  • 我就是这么做的。从来没有任何网络参考,除非我错过了什么。
  • 好吧,也许我把你弄糊涂了。您发布的链接是关于使用 Web 引用的 .NET 2.0 文章。你不应该注意那篇文章中的内容。

标签: c# web-services windows-phone-7


【解决方案1】:

如果 args.Result 为 null,则 args.Error 属性应填充发生的异常。

【讨论】:

  • 正常操作下,如果Canceled为false,Error为null,那么Result应该包含操作的结果。服务是否有可能成功返回但一个空值?
  • 有可能,但极不可能。当我使用同步版本时,它可以正常工作并返回应有的内容(不为空)。
  • 我会在网络上追踪数据。由于您是通过电话发送的,因此请求可能有所不同。
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多