5

在我的项目中,我需要从控制器调用 Web 服务。我已经完成了以下操作,并且有效。

  1. 将 Web 服务的 Web 引用添加到项目中。

  2. 调用服务如下:

    Service Wservice=new Service();
    Wservice.loginCompleted+=new Wservice_login_Completed;
    WService.login_Async("username","Password");
    

    注意:每当我调用此服务时,它都会抛出一个错误,即“此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果此异常发生在执行一个页面,确保该页面被标记为 <%@ Page Async="true" %>。"

为了克服这个问题,我使用

 [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 服务”.. 有什么想法吗?

4

3 回答 3

2

最后我成功地从 MVC 控制器调用了 web 服务。

注意:添加 ServiceReference 而不是 WebReference 并避免
“Task.Factory.StartNew(()=>);” 过程。

  [Httppost]
 public ActionResult login(logmodel model)
 {
    Wservice.ServiceSoapClient _host = new Wservice.ServiceSoapClient("ServiceSoap");

    var result_out = _host.login(uname, pwd, "test1", "test2", "test3", "test4");
 }

这里的“ServiceSoap”是我们服务的一个端点。你可以在 app.confiq 或 web.config 文件中显示端点。快乐编码...!

于 2013-06-18T07:49:54.220 回答
0
  1. 获取以下 NuGet:

    microsoft http client   
    (id = Microsoft.Net.Http)
    
  2. 创建一个 Web API 控制器 (webapi_Controller_Name)
    你的 Post 函数应该类似于下面的函数
    把这个函数放在你的 Web Api 控制器中

    [HttpPost]  
    public void PostForm(objUser ws_Obj)  
    {   
        // put you code here
    }
    
  3. 从您的常规控制器调用您的 Web 服务,如下所示。这是一个异步调用,Web Service 将立即返回。

    //call the web service, Asynch        
    HttpClient client = new HttpClient();    
    client.BaseAddress = new Uri("52323/");    
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    client.PostAsJsonAsync("//52323/api/webapi_Controller_Name/PostForm", objContact);
    
于 2013-10-29T08:10:05.413 回答
0

首先,通过右键单击解决方案资源管理器中的项目名称来创建服务引用,然后将鼠标悬停在“添加”选项上并单击“服务引用...”

其次,在“添加服务参考”页面的“地址”字段中粘贴您的Web服务地址,一定要在您的Web服务地址末尾添加“?wsdl”,否则它将不起作用,然后按“Go ”。您将看到 Web 服务出现在“服务”区域中。单击服务以查看将出现在“操作”部分中的可用服务。如果需要,重命名服务,然后按 OK 创建服务。

最后,将以下代码放入您的 MVC 控制器中。将代码放在 Get 或 Post 控制器中,没关系。

    // Declare the Request object.
    ServiceReference1.GetSurveyRequest myGSRq = new ServiceReference1.GetSurveyRequest();

    // You can set the webservice parameters here like...
    myGSRq.Address = getUserData[0].address;
    myGSRq.City = getUserData[0].city;
    myGSRq.State = getUserData[0].state;

    // Now declare the Response object.
    ServiceReference1.GetSurveyResponse myGSR = new ServiceReference1.GetSurveyResponse();

    //And then use the following to process the request and response.
    ServiceReference1.EMPortTypeClient emptc = new ServiceReference1.EMPortTypeClient();
    myGSR = emptc.GetSurvey(myGSRq);

    // In this example the response Object comes back with a URL used to redirect the user 
    //after the webservice has been processed.
    if (myGSR.Url != null)
        Response.Redirect(myGSR.Url.ToString());
    else
        Response.Write("Error");
    return null;

很简单,希望对你有帮助!

如果您正在创建新服务并且可以选择使用 Web 服务或 Web API,我建议使用 Web API。 使用 ASP.NET Web API 构建 RESTful API

于 2016-03-10T04:47:13.570 回答