Добрый день!
Реализовал пользовательский веб-сервис, который принимает оплаты 1С и инсертит или апдейтит их в СРМ. Метод, который принимает запросы, сначала проверяет по входным параметрам(1сId - айди пеймента в 1с), есть ли такой пеймент в СРМ, и если есть - апдейтит, если нет - инсертит.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class UsrApiERP: BaseService
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Json)]
public PaymentResponse payment(PaymentRequest request) {
var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
if(isPaymentExist(request.paymentId, request.invoiceId, userConnection)) {
updatePayment(request, userConnection);
} else {
insertPayment(request, userConnection);
}
var result = new PaymentResponse();
result.guid = getPaymentId(request.paymentId, request.invoiceId, userConnection);
return result;
}
Но недавно получилось так, что 1С отправила в 1 миг 3 запроса на создание одинаковых оплат( 1сId у всех одинаковый) и проверка не отработала правильно, так как записи еще не создались, а проверка пропустила все 3 запроса на создание новых пейментов. Может у кого был опыт, как такое побороть? Буду благодарен.