繁体   English   中英

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

[英]Multiple call using Web Api Service

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

这可能有2种情况。

  1. 单个设备请求多次
  2. 多个设备请求多次

在两个场景中我都无法处理多个请求,我不知道实际问题是什么,但它一直给我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;
      });
}

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

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

如果你是新来的异步编程或不理解异步方法是如何使用的await关键字做可能会长时间运行的工作,而不会阻塞调用者线程附加信息”,你应该阅读引入异步编程与异步和等待(C#和Visual Basic) 。“

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

最好。

我找到了使用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;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM