【问题标题】:Can WCF handle GUIDs?WCF 可以处理 GUID 吗?
【发布时间】:2011-12-19 18:39:26
【问题描述】:

我问是因为连接到本地开发数据库的单元测试使用 Guid 没有问题,但是当我通过 WCF 服务使用相同的方法时,它会失败并出现以下异常:

System.Data.EntityCommandExecutionException

我已阅读 WCF 将 Guid 转换为字符串。我的确切情况是这样的:

代理 -> 使用 Guid 传递对象

服务

服务 -> 将带有 Guid 的对象传回代理

这是从 Web 应用程序测试 WCF 服务时的错误:

[FaultException`1:执行命令定义时发生错误。有关详细信息,请参阅内部异常。] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +9456095 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 类型) +345 BusinessServices.NGIT.ServiceContracts.IIssueTrackerService.CreateIssue(CreateIssueRequest 请求) +0 D:\NextGenIssueTracker\branches\2011Updates\NextGenIssueTracker.Proxies\Proxies\IssueTrackerProxy.cs:25 中的 NGIT.Proxies.c__DisplayClass1.b__0(IIssueTrackerService s) D:\NextGenIssueTracker\branches\2011Updates\NextGenIssueTracker.Proxies\Helpers\UseServiceFunction.cs:26 中的 NGIT.Proxies.UseServiceFunction.UseService(ChannelFactory`1 channelFactory, Func`2 useService) D:\NextGenIssueTracker\branches\2011Updates\NextGenIssueTracker.Proxies\Proxies\IssueTrackerProxy.cs:25 中的 NGIT.Proxies.IssueTrackerProxy.CreateIssue(CreateIssueRequest 请求) D:\NextGenIssueTracker\branches\2011Updates\NGIT.Test.ClientProxy\Default.aspx.cs:36 中的 NGIT.Test.ClientProxy.Default.createIssueButtonClick(Object sender, EventArgs e) System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118 System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)+112 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)+10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+5563

下面是 Trace Viewer 的内部异常:

System.Data.EntityCommandExecutionException,System.Data.Entity,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 执行命令定义时发生错误。有关详细信息,请参阅内部异常。 在 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为) 在 System.Data.Objects.ObjectContext.CreateFunctionObjectResult[TElement](EntityCommand entityCommand,EntitySet entitySet,EdmType edmType,MergeOption mergeOption) 在 System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, MergeOption mergeOption, ObjectParameter[] 参数) 在 System.Data.Objects.ObjectContext.ExecuteFunction[TElement](字符串函数名,ObjectParameter[] 参数) 在 D:\NextGenIssueTracker\branches\2011Updates\NextGenIssueTracker.Data\UserIssueObjectGenerator.cs:line 305 中的 NGIT.Data.UserIssueEntities.CreateIssue(String issueTitle, String nextGenUserId, Nullable`1 guid) 在 D:\NextGenIssueTracker\branches\2011Updates\DataAccess.NextGenIssueTracker\Repositories\SqlUserIssueRepository.cs:line 51 中的 Liberty.DataAccess.NGIT.SqlUserIssueRepository.AddIssue(用户用户,问题问题) 在 D:\NextGenIssueTracker\branches\2011Updates\BusinessServices.NextGenIssueTracker\ServiceImplementations\IssueTrackerService.cs:line 59 中的 BusinessServices.NGIT.ServiceImplementations.IssueTrackerService.CreateIssue(CreateIssueRequest request) 在 SyncInvokeCreateIssue(对象,对象 [],对象 []) 在 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象实例,对象 [] 输入,对象 [] 和输出) 在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.MessageRpc.Process(布尔 isOperationContextSet)

【问题讨论】:

  • 异常类型意味着这是一个与数据相关的异常。您可以发布完整的异常(消息、类型 + 堆栈跟踪)吗?
  • 我不确定 GUID 数据类型是否可互操作。你试过只替换一个字符串吗?
  • EntityCommandExecutionException 的内部异常是什么?

标签: c# .net wcf web-services guid


【解决方案1】:

Yes.(.NET GUID -> Java 字符串)

当然,仅凭您发布的内容无法确定实际问题是什么。

【讨论】:

  • 将其添加为书签,因为如果您计划向 Java 客户端公开您的服务,那么了解他们应该期待什么以及您将遇到什么问题非常方便。
【解决方案2】:

我已经将 WCF 与基于 GUID 的实体一起使用,没有任何问题。我不认为这是您的问题,或者与 WCF 有任何关系。这听起来更像是您的数据库级别的问题:

EntityCommandExecutionException 表示当底层存储提供程序无法执行指定命令时发生的错误。此异常通常包含提供程序特定的异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2010-11-15
    • 2020-11-09
    • 2016-12-02
    • 2011-04-29
    相关资源
    最近更新 更多