Выполнение параллельного запроса к webapi обрабатывает только последний запрос в Selfhost Owin - PullRequest
0 голосов
/ 22 октября 2018

Я пишу службу коннектора, которая берет данные из одной системы и помещает их в другую систему.Это модель публикации с подпиской, для которой я создал веб-API на selfhost Owin, который прослушивает событие из системы и обновляет его для другой системы.

Когда запрос поступает последовательно, кажется, что все работает.когда запрос идет параллельно. Это последний запрос, который, кажется, выигрывает гонку, и все старые запросы, кажется, где-то теряются.

Запрос всегда содержит полный набор данных, то есть данные из предыдущего запроса.Например, если отправлено три сообщения, скажем, message-1, message-2, message-3 одновременно.первый ответ содержит «message-1», второй - «message1 и message2», а третий - «message1, message2 и message3», поэтому в webapi я всегда беру последнее обновленное сообщение и обрабатываю его так, если мойwebapi обрабатывает запрос-3, он извлекает сообщение-3 с использованием datetime и вставляет его в систему.

Таким образом, когда webapi получает все три сообщения одновременно, он вставляет только сообщение-3 и два других сообщения, т.е.сообщение-1 и сообщение-2 теряются.Ожидаемое поведение должно быть вставить все 3 сообщения - сообщение1, сообщение2 и сообщение3 в любом порядке.Также это работает в случае, когда два независимых запроса поступают одновременно. Пожалуйста, помогите.Ниже приведен фрагмент кода.

 public void Configuration(IAppBuilder appBuilder)
        {
            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            appBuilder.UseWebApi(config);
        } 

Код WebAPI -

public class EventListenerController : ApiController
{    
    Logger Log;

    [HttpPost]
    public IHttpActionResult AlertNotificationHandler(Object obj)
    {        

        try
        {

            string response = obj.ToString();               
            TaskListUpdateResponse taskListResult = jsonMgr.ParseUpdateTaskList((JsonConvert.DeserializeObject(response)).ToString());

            if (taskListResult != null && taskListResult.eventType != null &&
                taskListResult.eventType.Equals("tasklist.updated"))
            {                    
                DateTime createdOn = taskListResult.data.createdOn;
                List<RestHelper.Task> Tasks = taskListResult.data.tasks;                   
                string comment = "";                 
                DateTime timestamp = taskList.data.modifiedOn;


                Log.Info("Object received" + obj.ToString());                      
                int comp = 0, skip = 0;
                int totalTasks = Tasks.Count; 
                Activity activity = Tasks.SelectMany(x => x.activities).OrderByDescending(y => y.timestamp).FirstOrDefault();

                //Insert activity .......................
...