使用Web Api服务进行多次呼叫

时间:2014-07-08 04:36:40

标签: c# linq asp.net-mvc-4 azure asp.net-web-api

我正在使用Web Api服务将数据传递到我的移动设备。

可能有两种情况。

  1. 单个设备多次请求
  2. 多台设备多次请求
  3. 在两种情景中,我无法处理多个请求,我不知道实际问题是什么,但它一直在给我403 Response500 Response

    我需要在内处理多个请求,因为我正在同时处理超过1000个设备并且我需要在几秒钟内回复它们因为我们不希望我们的设备等待响应超过几秒钟。

    目前,我正在使用Azure平台进行Web Api服务,并使用LINQ使用MVC 4.0。如果您需要我的代码,那么我将为您提供代码(我在我的项目中使用存储库模式)

    代码

    控制器:

    [HttpPost]
    public JObject GetData(dynamic data)
    {
       JObject p = new JObject();
    
       try
        {
          MyModelWithObjectInData transactionbatchData = JsonConvert.DeserializeObject<MyModelWithObjectInData>(data.ToString());
          return _batchDataService.batchAllDataResponse(transactionbatchData);//Call Repository 
        }
    }
    

    存储库:

    public JObject batchAllDataResponse(MyModelWithObjectInData oData)
    {
       JObject p = new JObject();
       var serviceResponseModel = new MyModelWithObjectInData();
       using (var transaction = new TransactionScope())
       {
         //Insert in Tables
       }
    
    //Select Inserted Records
    var batchData = (from p in datacontext.Table1
                     where p.PK == oData.ID select p).FirstOrDefault();
    
     if (batchData != null)
        {
          serviceResponseModel.GetBatchDataModel.Add(new BatchDataModel //List Residing in MyModelWithObjectInData Class File
           {
                //add values to list
           });       
        }
    
    //Performing 3 Operations to Add Data in Different List (All 3 are Selecting the Values from Different Tables) as i need to Give Response with 3 Different List.
    
     return p = JObject.FromObject(new
            {
                batchData = serviceResponseModel.GetBatchDataModel,
                otherdata1 = serviceResponseModel.otherdata1, //list Residing in my MyModelWithObjectInData Model 
                otherdata2 = serviceResponseModel.otherdata2 //list Residing in my MyModelWithObjectInData Model
            });
    

    我使用下面的代码来跟踪通过服务发出的所有请求,但我收到了错误。

    //here i am getting error
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
       //var content = request.Content.ReadAsStringAsync().Result;
       ServiceTypes myObjs = JsonConvert.DeserializeObject<ServiceTypes>(request.Content.ReadAsStringAsync().Result);
    
        bool result = _serviceLogService.InsertLogs(request, myObjs); //Getting Error while inserting data here on multiple request
        return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
          {
            HttpResponseMessage response = task.Result;
            return response;
          });
    }
    

    任何帮助都会得到很多赞赏。

2 个答案:

答案 0 :(得分:3)

从您的api服务提供数据调用的代码段将是最方便的。它们是处理并发查询的几种方法;如果您还没有探索过它,那么async and await方法最适合在这种情况下使用。但这是一个模糊的观点,我需要查看您的代码,以便为您提供明确的答案。

附加信息&#34;如果您不熟悉异步编程或者不了解异步方法如何使用await关键字来执行可能长时间运行的工作而不阻塞调用者的线程,那么您应该阅读Asynchronous Programming with Async and Await (C# and Visual Basic)&#34;

希望这些信息能让您走上正轨。

最佳。

答案 1 :(得分:0)

我使用Async方法找到解决方案来处理重复的服务请求

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
  //Logic to Track all the Request
  var response = await base.SendAsync(request, cancellationToken);
  return response;
}

我的控制器无法启动上下文文件,因为它已经启动了&#34;并发请求&#34; ,因为我收到了多个请求而死锁我的对象从设备,以便我修改他的代码以在SendAsync方法中记录所有服务并等待帮助我等到任务完成。