.NET webservice使用参数类型的实例?

时间:2008-10-10 20:59:31

标签: vb.net web-services types proxy-classes

我的解决方案中有一个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”,我可以不能把它转换回来。有谁知道我怎么处理这种类型的不匹配?

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

2 个答案:

答案 0 :(得分:2)

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

但是,您可能也引用了Web服务单独包含相同类型的库。这是Dim Driver时预期的类型。这就是为什么会出现不匹配的原因。

答案 1 :(得分:0)

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