Я пишу службу коннектора, которая берет данные из одной системы и помещает их в другую систему.Это модель публикации с подпиской, для которой я создал веб-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 .......................