我正在使用C#,.NET Framework 4.7和MongoDb开发ASP.NET Web API应用程序。
我有这个方法:
[HttpPut]
[Route("api/Public/SendCommissioning/{serial}/{withChildren}")]
public HttpResponseMessage SendCommissioning(string serial, bool withChildren)
{
string errorMsg = "Cannot set commissioning.";
HttpResponseMessage response = null;
bool serverFound = true;
try
{
[...]
// Mongo
MongoHelper mgHelper = new MongoHelper();
mgHelper.InsertCommissioning(serial, withChildren);
}
catch (Exception ex)
{
_log.Error(ex.Message);
response = Request.CreateResponse(HttpStatusCode.InternalServerError);
response.ReasonPhrase = errorMsg;
}
return response;
}
有时这个方法很快被调用,我在这里得到一个错误:
// Mongo
MongoHelper mgHelper = new MongoHelper();
mgHelper.InsertCommissioning(serial, withChildren);
这里我按顺序插入我收到的连续剧,有时我在MongoDb中收到重复密钥的错误:
我有一种方法来获取Mongo中使用的最新ID(主键)。并且两个请求获得相同的id,所以当我尝试将它插入Mongo时,我得到一个无效的密钥异常。
我想用一个队列来存储连续出版物,然后按照我收到它们的顺序使用它们。但是当我尝试在MongoDb中存储序列时,我想会得到同样的错误。
也许如果我可以设置一个方法,如果它正在运行,我必须等待运行它,它会工作。这个方法将把序列插入Mongo。
我该怎么做?一种方法,如果它正在运行,则无法在另一个Web Api请求中运行它。
或者,你知道更好的选择吗?
顺便说一句,我无法阻止这种方法。也许我需要使用这个同步部分运行一个线程。