【发布时间】:2016-06-24 14:46:26
【问题描述】:
我有一个 Web 服务 (WSDL) 和一些无效的异步方法(我无法将其更改为返回任务)来调用更长的请求。
如何从这些方法中获取结果值?
在 Web 服务上,我有一些 EventHandlers、EventArgs(我需要在 EventHandle 委托上使用)。
所以基本问题是,我怎样才能找到所有这些东西来得到我的结果?
我有这个,直到现在:
//Methods signatures
getSomethingCompletedEventArgs(object[] results, Exception, bool, object userState)
getSomethingCompletedHandler(object sender, Service.getSomethingCompletedEventArgs)
//Didn't build
Service srv = new Service()
srv.getSomethingCompleted += new getSomethingCompletedEventHandler(srv.getSomethingAsync);
//Other try
var args = new getSomethingCompletedEventArgs(null, new Exception(), false, "");
//Didn't build too (Method name expected)
srv.getSomethingCompleted += new getSomethingCompletedEventHandler(args);
//This built, but I don't know how to get the results
public async static void GetSomething()
{
await Task.Run(() => srv.getSomethingAsync(arg1,arg2,arg3));
}
【问题讨论】:
-
void方法没有返回值,你认为你能从中得到什么? -
如果没有更多关于您的应用实际在做什么的周边信息,甚至很难理解您的问题。当您发出任何异步请求时,您必须指定一个“回调”,该“回调”最终将接收指示成功或失败的“事件”。在上面标记为“其他尝试”等的各种代码中,看起来你在或多或少正确的方向上磕磕绊绊,但还没有完全正确,也放弃了很多很快。
-
DavidG,发出请求的调用可能确实是
void,因为它们不返回值。当预期事件之一发生时,将在某个未知的未来时刻提供可能“返回”的值。这些值将是与事件一起提供给这些处理程序的数据的一部分。 -
@MikeRobinson 我搜索了很多,我真的认为“另一种尝试”是正确的道路......但我还没有意识到我错过了什么......跨度>
-
那些“
+=”对我来说似乎有点好笑,但是,“你知道,只要谷歌一下。” :-) 冲浪,直到找到现有的工作示例。 (也许在 GitHub 上?)将其与您的并排比较。当您还不够熟悉该语言以“本能地”做事时,这将比用头撞它要快得多。去find 已经有效的东西。盯着它看。复制它。
标签: c# web-services asynchronous wsdl void