我正在编写一个连接器服务,该服务将从一个系统中获取数据并将其放入另一个系统中。它是一种发布订阅模型,我已经在自托管Owin上为其创建了一个Web API,该监听器侦听来自系统的事件并将其更新到其他系统。
当请求顺序出现时,一切似乎都正常。问题是当请求并行时。这是最后一个赢得比赛的请求,所有旧请求似乎都丢失了。
该请求始终包含完整的数据集,即来自较早请求的数据。例如,如果发送了三个消息,则同时说出message-1,message-2,message-3。第一个响应包含“ message-1”,第二个响应包含“ message1和message2”,第三个响应包含“ message1,message2和message3”,因此在webapi中,我始终采用最新更新的消息并对其进行处理,以防万一webapi正在处理request-3,它将使用datetime提取message-3并将其插入系统。
因此,当webapi同时获取所有三个消息时,它只会插入消息3,而其他两个消息即消息1和消息2都将丢失。预期的行为应该以所有顺序插入所有3条消息-message1,message2和message3。也可以在两个独立请求同时出现时使用。请帮助。 下面是代码段。
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 .......................