客户端和服务之间存在类型不匹配。更新azure存储后出错

时间:2014-04-03 07:44:16

标签: c# azure json.net nuget azure-storage

这个错误给我的工作带来了很多延迟 这发生在我升级我的nuget包时,特别是Windows Azure Storage

enter image description here

然后当我运行云项目时,它给了我这个错误:

Server Error in '/' Application.

There is a type mismatch between the client and the service. Type '[ProjectNamespace].Merchants.DeviceRegistration' is not an entity type, but the type in the response payload represents an entity type. Please ensure that types defined on the client match the data model of the service, or update the service reference on the client.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: There is a type mismatch between the client and the service. Type '[ProjectNamespace].Merchants.DeviceRegistration' is not an entity type, but the type in the response payload represents an entity type. Please ensure that types defined on the client match the data model of the service, or update the service reference on the client.

Source Error: 


Line 185:                    select entity;
Line 186:
Line 187:            var found = a.FirstOrDefault(); -- Throwing error here
Line 188:
Line 189:            return found != null && found.ValidEnd.GetValueOrDefault(dtnow) >= dtnow;

Source File: ---------------------    Line: 187 

堆栈追踪:

[InvalidOperationException: There is a type mismatch between the client and the service. Type '[ProjectNameSpace].Merchants.DeviceRegistration' is not an entity type, but the type in the response payload represents an entity type. Please ensure that types defined on the client match the data model of the service, or update the service reference on the client.]
   System.Data.Services.Client.Materialization.EntryValueMaterializationPolicy.MaterializeResolvedEntry(MaterializerEntry entry, Boolean includeLinks) +188
   System.Data.Services.Client.Materialization.EntryValueMaterializationPolicy.Materialize(MaterializerEntry entry, Type expectedEntryType, Boolean includeLinks) +189
   System.Data.Services.Client.Materialization.ODataEntityMaterializer.DirectMaterializePlan(ODataEntityMaterializer materializer, MaterializerEntry entry, Type expectedEntryType) +61
   System.Data.Services.Client.Materialization.ODataEntityMaterializerInvoker.DirectMaterializePlan(Object materializer, Object entry, Type expectedEntryType) +144
   System.Data.Services.Client.ProjectionPlan.Run(ODataEntityMaterializer materializer, ODataEntry entry, Type expectedType) +65
   System.Data.Services.Client.Materialization.ODataEntityMaterializer.ReadImplementation() +282
   System.Data.Services.Client.Materialization.ODataMaterializer.Read() +41
   System.Data.Services.Client.MaterializeAtom.MoveNextInternal() +527
   System.Data.Services.Client.MaterializeAtom.MoveNext() +106
   System.Linq.<CastIterator>d__b1`1.MoveNext() +85
   System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source) +164
   System.Data.Services.Client.DataServiceQueryProvider.ReturnSingleton(Expression expression) +717
   System.Data.Services.Client.DataServiceQueryProvider.Execute(Expression expression) +111
   System.Linq.Queryable.FirstOrDefault(IQueryable`1 source) +251
   [ProjectName].Logic.ClientAuthentication.IsValidDevice(String devicecode, String clientkey, String merchant) in [PathOfFile]\ClientAuthentication.cs:187
   [ProjectName].Logic.ClientAuthentication.LoginDevice(String merchant, String devicecode, String clientkey) in [PathOfFile]\ClientAuthentication.cs:69
   [ProjectName].Web.Cache.Device.RefreshToken(String merchantId) in [PathOfFile]\Cache\Device.cs:49
   [ProjectName].Web.Cache.Device.get_Salt() in [PathOfFile]\Cache\Device.cs:24
   [ProjectName].Web.Merchant.Controllers.HomeController.Index() in [PathOfFile]\Controllers\HomeController.cs:16
   lambda_method(Closure , ControllerBase , Object[] ) +101
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +59
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +435
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +60
   System.Web.Mvc.Async.ActionInvocation.InvokeSynchronousActionMethod() +76
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +36
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +117
   System.Web.Mvc.Async.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41() +323
   System.Web.Mvc.Async.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41() +323
   System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +44
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +72
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9514928
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18446  

以下是生成的查询:

{https://[accountname].table.core.windows.net/MerchantApplication()?$filter=PartitionKey eq '635180925195321704_38913b36f10d47e4916671ba51e2184c' and RowKey eq 'D_f974c1da570946f183f4f4640534a343'}
    base {System.Data.Services.Client.DataServiceQuery<[ProjectNamespace].Merchants.DeviceRegistration>}: {https://[accountname].table.core.windows.net/MerchantApplication()?$filter=PartitionKey eq '635180925195321704_38913b36f10d47e4916671ba51e2184c' and RowKey eq 'D_f974c1da570946f183f4f4640534a343'}  

我完全不知道为此寻找解决方案。

修改

以下是更高版本:

enter image description here

我还注意到更高版本会生成此查询:

{https://[accountname].table.core.windows.net/MerchantApplication()?$filter=(PartitionKey eq '635180925195321704_38913b36f10d47e4916671ba51e2184c') and (RowKey eq 'D_f974c1da570946f183f4f4640534a343')}
    base {System.Data.Services.Client.DataServiceQuery<[ProjectNameSpace].Merchants.DeviceRegistration>}: {https://[accountname].table.core.windows.net/MerchantApplication()?$filter=(PartitionKey eq '635180925195321704_38913b36f10d47e4916671ba51e2184c') and (RowKey eq 'D_f974c1da570946f183f4f4640534a343')}

修改2

要添加更多信息,我还执行了以下操作:

  • 删除所有nuget包并逐一恢复
  • 更新了nuget.exe以及所有nuget包,我甚至更新了Visual Studio 2012的Windows Azure工具。版本为2.2
  • 我尝试过在网上找到的与此问题相关的所有可能解决方案。

但最终,上述问题仍未解决 现在,我回到之前的项目文件。但是,此项目在部署到生产服务器(Windows Azure)时遇到问题,但在登台服务器中没有问题。这真的很奇怪。

1 个答案:

答案 0 :(得分:5)

请参阅here了解对我有用的答案。

基本上,为您的DataServiceKey派生类(TableEntity?)添加Merchants.DeviceRegistration属性,其中包含PartitionKeyRowKey属性。

我想你的类声明需要看起来如下:

[DataServiceKey("PartitionKey", "RowKey")]
DeviceRegistration : TableEntity