2

我的解决方案中有一个 Windows 窗体项目和一个 Web 服务项目,我正在尝试调用 Web 服务并返回一个客户对象作为结果。问题是当我尝试接收返回对象时,我收到一个无法转换它的错误。例如,这是我的网络服务的签名:

Public Function GetDriverByID(ByVal DriverID As Integer) As Driver

这是我用来调用它的代码:

    Dim d As Driver = mywebserviceinstance.GetDriverByID(1)

但我收到此编译时错误(wsDrivers 是我添加到表单项目中的 Web 引用的名称):“ProjectNamespace.Common.wsDrivers.Driver 类型的值无法转换为 ProjectNamespace.Common.Driver”

这个“Common”命名空间包含 Driver 类,我不确定为什么来自 Web 服务的返回类不仅仅是一个通用的“Driver”,而是一个“wsDrivers.Driver”,我无法转换回来了。有人知道我该如何处理这种类型不匹配吗?

编辑:感谢您的解释 - 这实际上清楚地说明了它在做什么。但是,有什么方法可以强制它使用实际类型而不是代理(或者,有什么方法可以在“真实”实例和“代理”实例之间进行转换),还是我必须在我通过网络发送它们之前序列化属性,然后手动反序列化返回值?

4

2 回答 2

2

这实际上很常见。发生的事情是 Web 服务已经在其中定义了 Web 服务中使用的所有类型的定义。当您添加对该 Web 服务的引用时,它会在您的命名空间的子命名空间中自动生成一个代理类型。这就是您调用 Web 服务时返回的内容。

但是,您可能还引用了 Web 服务单独执行的包含相同类型的相同库。这是您在调暗驱动程序时所期望的类型。这就是为什么存在不匹配的原因。

于 2008-10-10T21:08:17.660 回答
0

VB.NET 或 C# 项目中的 Web 服务引用可以引用任何类型的 Web 服务,并且不限于 ASP.NET 提供的那些。这就是 Visual Studio 为每个可以从 Web 服务检索的对象创建代理类的原因。

于 2008-10-10T21:06:09.847 回答