【发布时间】:2013-06-12 00:52:38
【问题描述】:
在我的项目中,我需要从控制器调用 Web 服务。我已经完成了以下操作。
将 Web 服务的 Web 引用添加到项目中。
-
调用服务如下:
Service Wservice=new Service(); Wservice.loginCompleted+=new Wservice_login_Completed; WService.login_Async("username","Password");注意:每当我调用此服务时,它都会抛出一个错误,即 “此时无法启动异步操作。 异步操作只能在异步处理程序中启动 或模块或在页面生命周期中的某些事件期间。如果这 执行页面时发生异常,请确保该页面已标记 ."
为了克服这个问题,我使用了
[Httppost]
public ActionResult login(logmodel model)
{
Task.Factory.StartNew(() =>
{
Wservice.loginCompleted+=new Wservice_login_Completed;
WService.login_Async("username","Password");
});
if(finalresult==true)
{
*** return View();
}
}
void Wservice_login_completed()
{
Here i got the output.
}
但是 Wservice_login_completed() 函数的调用是在 View*** 返回之后,所以我没有得到结果。如何实现“从控制器调用 web 服务”.. 有什么想法吗?
【问题讨论】:
-
你在用
AsynController吗? -
我的预感是这与页面渲染周期有关,你能从浏览器 Web 开发者工具中发布 HTTP 请求吗,我也怀疑你是否真的处于异步模式。
-
您为什么使用网络参考而不是服务参考?这是旧版“ASMX”技术的一部分,不应在新代码中使用。
-
@JohnSaunders - 您能否解释一下您说为什么使用网络参考而不是服务参考?
-
@PankajGarg:我建议使用服务参考
标签: asp.net-mvc asp.net-mvc-3 web-services