我正在测试一个 WCF 服务和一个 EF 数据层,将字符串列接收为 (null),但将整数作为实际数据接收。为什么字符串为空?
I'm testing a WCF Service and an EF Data layer, receiving String columns as (null), but receive integers as real data. Why are the strings null?
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 服务器构建的 'database first' 组 tables。我的 WCF 服务接口和代码
此时只有 table 之一的属性和方法。并且 table 也被构建在逻辑和数据层方法中。
因此,我现在正在使用 WCF 测试客户端测试该服务,并且我在我的服务对数据层的响应中正确接收了一些整数数据,但没有字符串数据。
While testing my "GetMemberByID" method, it returns all String column results as a value of "(null)", and a type of "NullObject",
但 returns 具有实际值的整数。 WCF Soap 响应将返回的字符串值显示为“”。但是,
整数返回如下:“7”。我的测试数据库中有 50 多个数据行用作源
对于 EF6.2 EDMX 构建。我的 App.config 在数据和服务层中引用相同的 (localdb)\ V13.0 服务器和数据库。
有没有人遇到过这个问题,你能告诉我我错过了什么吗? MSSQL 数据库最初是一个 (OleDb) MS Access 数据库,我将它导入到
微软服务器。提前致谢。
好像序列化过程出了问题。在我这边,字符串字段可以正常返回。默认情况下,DataContractSerializer
用于 deserialize/deserialize 复杂对象数据。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-data-contracts
最可能的原因可能是可空字段未被 [DataMember]
属性修饰。请检查客户端自动生成的DataContract
列是否包含[DataMember]
属性。
http://sivakrishnakuchi.blogspot.com/2010/05/troubleshoot-wcf-service-returning.html
如果问题仍然存在,请随时告诉我。
好的,我发现了我的错误。在将业务域对象转换回 Service.cs 代码文件中的服务对象时,我只转换了 MemberID 和 RowVersion - 而没有其他列。因此,WCF 测试客户端结果中唯一显示的是 MemberID 和 RowVersion——这恰好是我的实体中仅有的两个非字符串。所有字符串类型都是空的,因为我没有将它们转换回服务。谢谢你看这个,亚伯拉罕,但你让我开始仔细观察,谢谢你的建议。 MS 文档也很有帮助。一旦我完成了从 UI 到数据层再返回的完整 "step into" 调试跟踪,我就能够看到数据转换失败。还有一件事,在我可以一步一步调试到数据层并返回到服务层之前,我必须解决很多人遇到的 "Underlying database did not open" 问题。我通过我的本地 IIS 托管我的服务,并且不得不对 IIS 应用程序进行一些关于用户凭据的更改。我的 App.config 设置为使用 "Integrated Security=True" - 这是 IIS 应用程序池中的 "passthrough" 凭据。我将我的 IIS 应用程序设置为 "Specific User",但没有在我的连接字符串中使用 UserID/Password。一旦我将我的 IIS 应用程序更改为 "Passthrough" - 我就能够连接并调试到 DAL 并返回。
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 服务器构建的 'database first' 组 tables。我的 WCF 服务接口和代码 此时只有 table 之一的属性和方法。并且 table 也被构建在逻辑和数据层方法中。 因此,我现在正在使用 WCF 测试客户端测试该服务,并且我在我的服务对数据层的响应中正确接收了一些整数数据,但没有字符串数据。
While testing my "GetMemberByID" method, it returns all String column results as a value of "(null)", and a type of "NullObject",
但 returns 具有实际值的整数。 WCF Soap 响应将返回的字符串值显示为“”。但是,
整数返回如下:“7”。我的测试数据库中有 50 多个数据行用作源
对于 EF6.2 EDMX 构建。我的 App.config 在数据和服务层中引用相同的 (localdb)\ V13.0 服务器和数据库。
有没有人遇到过这个问题,你能告诉我我错过了什么吗? MSSQL 数据库最初是一个 (OleDb) MS Access 数据库,我将它导入到 微软服务器。提前致谢。
好像序列化过程出了问题。在我这边,字符串字段可以正常返回。默认情况下,DataContractSerializer
用于 deserialize/deserialize 复杂对象数据。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-data-contracts
最可能的原因可能是可空字段未被 [DataMember]
属性修饰。请检查客户端自动生成的DataContract
列是否包含[DataMember]
属性。
http://sivakrishnakuchi.blogspot.com/2010/05/troubleshoot-wcf-service-returning.html
如果问题仍然存在,请随时告诉我。
好的,我发现了我的错误。在将业务域对象转换回 Service.cs 代码文件中的服务对象时,我只转换了 MemberID 和 RowVersion - 而没有其他列。因此,WCF 测试客户端结果中唯一显示的是 MemberID 和 RowVersion——这恰好是我的实体中仅有的两个非字符串。所有字符串类型都是空的,因为我没有将它们转换回服务。谢谢你看这个,亚伯拉罕,但你让我开始仔细观察,谢谢你的建议。 MS 文档也很有帮助。一旦我完成了从 UI 到数据层再返回的完整 "step into" 调试跟踪,我就能够看到数据转换失败。还有一件事,在我可以一步一步调试到数据层并返回到服务层之前,我必须解决很多人遇到的 "Underlying database did not open" 问题。我通过我的本地 IIS 托管我的服务,并且不得不对 IIS 应用程序进行一些关于用户凭据的更改。我的 App.config 设置为使用 "Integrated Security=True" - 这是 IIS 应用程序池中的 "passthrough" 凭据。我将我的 IIS 应用程序设置为 "Specific User",但没有在我的连接字符串中使用 UserID/Password。一旦我将我的 IIS 应用程序更改为 "Passthrough" - 我就能够连接并调试到 DAL 并返回。