我在Visual Studio 2008中使用C#编写了一个Web服务(我也在VS 2005中编写过)。 我可以编写一个测试Windows窗体应用程序来使用该服务没问题。
我遇到的问题是从C#/ VS2003(或php这是我真正的问题)中消耗它。它只是给了我错误:
“无法将类型'TestIntel.WebIntel.GetSitesResponseGetSitesResult'隐式转换为'System.Data.DataTable'
Web方法确实返回了DataTable;正如我所说,如果消费者是在VS2005 / 2008中构建的,那么这种方法很好。是什么给了什么?
答案 0 :(得分:3)
为了使用DataTable,调用点(php和.net 1.1)需要知道如何将其反序列化为可用对象。
这意味着他们必须拥有一个类似的对象,可以将数据反序列化。
显然,PHP无法做到这一点。并且.net 1.1错误的原因是DataTable对象在1.1和2.0之间发生了很大的变化。事实上,微软表示.Net 1.1数据表对象是BY DESIGN,不应该通过Web服务进行序列化。 ([http://support.microsoft.com/kb/306134][1])
如果您正在寻找一种真正的跨语言方法,那么您需要将响应序列化为标准XML对象。任何语言都可以正确解析。这是一项更多的工作,但可以提供有用的服务。