【问题标题】:WCF call in code doesn't return all expected data代码中的 WCF 调用不会返回所有预期的数据
【发布时间】:2016-04-19 16:00:16
【问题描述】:

我有一个 WCF 端点,它返回从数据库查询的数据。例如,对于一个特定的呼叫,我知道我应该收到 175 条记录。但是我的 WCF 代码总是只返回 105 条记录。通过运行端点函数执行的后端存储过程,我能够获得预期的 175 条记录。此外,如果我使用 WCF 测试客户端连接到端点,它也会获得 175 条记录。

我尝试了很多方法(更改绑定、readerquotas、fiddler 等),但无法确定我的代码有什么不同。基本上,我的测试代码是一个 winforms 应用程序,它具有对端点的服务引用。我在 app.config 中将 maxReceivedMessageSize 增加到 655360000,因为数据的大小很大。我使用 WSHttp 作为我的绑定。下面是执行调用并返回 105 条记录的代码:

var client = new MyDataClient("WSHttpBinding_IMyData");            
var data = client.GetMyDataByDateRange("Location123", DateTime.Now.Date, DateTime.Now.Date).ToList();            
MessageBox.Show(string.Format("Got {0} records", data.Count)); // always 105

关于为什么我的代码会返回不正确的结果集的任何想法?

【问题讨论】:

  • 您是否尝试在数据库上运行分析器以查看当您从 winforms 应用程序调用 WCF 服务时进行的查询调用是什么?
  • @Rajesh 我没有使用数据库分析器...不幸的是,我的公司没有权限对数据库进行分析。
  • 最好的选择是在调用数据库之前包含一些日志语句,这些语句将捕获所有参数并查看它们是否与 WCF 测试客户端和您的 Windows 窗体应用程序中的相同

标签: c# wcf wcftestclient


【解决方案1】:

这通常意味着您正在调用服务的 2 个不同实现。

检查您与 WCF 测试客户端一起使用的端点是否与您在应用程序的 .config 中配置的端点相同。

【讨论】:

  • 我验证了 WcfTestClient 中的端点和我的 app.config 是相同的。我什至用相同的端点 URL 以编程方式编写了自己的绑定,但仍然得到相同的结果。
  • 只有其他的可能。当您使用 TestClient 时,您将参数编写为字符串。但在您的应用程序中,您使用的是 DateTime.Now.Date。尝试在您的应用中使用相同的字符串。
  • 或者您可以调试您的服务,以便在从 WCFTestClient 和您的测试应用程序调用它时查看参数的值。
  • 就是这样!我不确定 100% 为什么,因为端点确实需要 System.DateTime 类型。但是,当我执行 DateTime.Parse("04/19/2016") 时,它就起作用了。显然,传递给 WCF 端点函数的 DateTime.Date 可能不只提供 DateTime 的日期部分。无论哪种方式...再次感谢。
  • 好吧,请记住,即使它期望 DateTime,WCF 也会对请求进行序列化(因为它使用 SOAP 和 XML)。之后,服务反序列化请求。
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2022-07-19
相关资源
最近更新 更多