我在测试一个WCF服务和一个EF数据层,接收String列为(null),但接收整数为真实数据。为什么字符串是空的?

问题描述 投票:0回答:1
I'm building a multi-layered Windows VS C# solution that has a WCF Service Library project with EF6.2 loaded, and an ADO.NET Data layer with EF6.2 also.

EDMX模型是以 "数据库优先 "的方式从我的笔记本电脑上的MSSQL Server Express 2016服务器上建立的一组表。我的WCF服务接口和codeonly此时有其中一张表的属性和方法。 而那个表也已经建立了逻辑和数据层方法。 所以,我现在用WCF测试客户端测试那个服务,在我的服务从到数据层的响应中,我正确的接收到一些整数数据,但是没有字符串数据。

While testing my "GetMemberByID" method, it returns all String column results as a value of "(null)", and a type of "NullObject",

但返回的是整数的实际值。 WCF Soap响应中显示返回的String值为""。 但是,整数的返回是这样的。 "7". 在我的测试数据库中,有超过50条数据行,它被用作EF6.2 EDMX构建的源。 我的App.config的数据层和服务层都引用了同一个(localdb)\V13.0服务器和数据库。

有人遇到过这个问题吗,能告诉我我缺什么吗? MSSQL数据库原来是(OleDb)MS Access数据库,我把它导入到MSSQL Server中。 先谢谢你了。

wcf ado.net-entity-data-model
1个回答
1
投票

好像是序列化过程出了点问题。在我这边,字符串字段可以正常返回。在默认情况下 DataContractSerializer 是用来反序列化复杂对象数据的。https:/docs.microsoft.comen-usdotnetframeworkwcffeature-detailsusing-data-contracts。 最可能的原因可能是可空字段没有经过 [DataMember] 属性。 请检查该列的 DataContract 在客户端自动生成的包含有 [DataMember] 属性。http:/sivakrishnakuchi.blogspot.com201005troubleshoot-wcf-service-returning.html。 如果问题还存在,请随时告诉我。


1
投票

好吧,我发现了我的错误。 在将业务域对象翻译回Service.cs代码文件中的Service对象时,我只翻译了MemberID和RowVersion--而没有翻译其他列。 因此,WCF测试客户端结果中唯一显示的是MemberID和RowVersion--它们恰好是我的实体中唯一的两个非字符串。所有的字符串类型都是空的,因为我没有把它们翻译回服务中。 谢谢你来看这个问题,Abraham,但你让我开始仔细观察,谢谢你的建议。MS文档也很有帮助。有一次,我做了一个完整的 "步入 "调试跟踪,从UI到数据层,然后再回来,我能够看到数据转换失败。 还有一件事,在我一步步调试到数据层再回到服务层之前,我必须解决很多人都遇到的 "底层数据库没有打开 "的问题。 我通过我的本地IIS托管我的服务,并不得不对IIS应用程序进行一些关于用户凭证的修改。 我的App.config被设置为使用 "Integrated Security=True"--这在IIS App池中是一个 "passthrough "凭证。 我的IIS App设置为 "特定用户",但在连接字符串中没有使用UserIDPassword。 一旦我把我的IIS应用改成 "Passthrough"--我就能够连接,并调试到DAL,然后再返回。

© www.soinside.com 2019 - 2024. All rights reserved.