我的解决方案中有一个Windows窗体项目和一个Web服务项目,我正在尝试调用Web服务并返回一个客户对象作为结果。问题是,当我尝试接收返回对象时,我收到一个错误,它无法转换它。例如,这是我的webservice的签名:
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”,我可以不能把它转换回来。有谁知道我怎么处理这种类型的不匹配?
编辑:感谢您的解释 - 这实际上清楚地说明了它在做什么。但是,有什么方法可以强制它使用实际类型而不是代理(或者,更确切地说,是否有任何方式在“真实”实例和“代理”实例之间进行转换),或者我是否必须在通过网络发送属性之前序列化属性,然后手动反序列化返回值?
答案 0 :(得分:2)
这实际上很常见。发生的事情是Web服务在其中定义了Web服务中使用的所有类型的定义。添加对该Web服务的引用时,它会在命名空间的子命名空间中自动生成代理类型。这就是您调用Web服务时返回的内容。
但是,您可能也引用了Web服务单独包含相同类型的库。这是Dim Driver时预期的类型。这就是为什么会出现不匹配的原因。
答案 1 :(得分:0)
VB.NET或C#项目中的Web服务引用可以引用任何类型的Web服务,并且不限于ASP.NET提供的那些。这就是为什么Visual Studio为每个可以从Web服务检索的对象创建代理类的原因。