我使用Azure的表存储从我的MVC应用程序日志访客信息,但它有时会抛出以下异常:Azure的表存储在插入引发异常:(409)冲突
[WebException: The remote server returned an error: (409) Conflict.]
System.Net.HttpWebRequest.GetResponse() +1399
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:677
[StorageException: The remote server returned an error: (409) Conflict.]
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:604
Microsoft.WindowsAzure.Storage.Table.TableOperation.Execute(CloudTableClient client, CloudTable table, TableRequestOptions requestOptions, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Table\TableOperation.cs:44
这似乎发生当我第一次访问网站一段时间不活动时,然后当我刷新页面时,页面加载并且每次点击都很好。
这里是造成异常的代码的一部分:
var visit = new TrackerVisitEntity(id, url, referer);
var insertOperation = TableOperation.Insert(visit);
_table.Execute(insertOperation);
更新
正如意见中指明以下两个答案,问题是,有时在页面加载两次并且我正在使用GUID(对用户唯一)作为分区键,并将当前日期时间用作行键,所以这会导致重复的实体并导致异常。
虽然Amor的回答更加深入,但Dogu简单的解决方案就是我使用的解决方案,所以我标记了他的正确答案。感谢大家。
当您收到此错误时,您可以检查实体是否存在吗? –
作为RowKey和PartitionKey使用什么? –
请检查实体是否已经存在Gaurav提到。 –