代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

.NET WebService是否使用参数类型的实例?

  •  1
  • SqlRyan  · 技术社区  · 16 年前

    我的解决方案中有一个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”

    这个“公共”命名空间包含驱动程序类,我不知道为什么Web服务的返回类不仅仅是一个通用的“驱动程序”,而是一个“wsdrivers.driver”,我无法将其转换回。有人知道我如何处理这种类型的不匹配吗?

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Nick    16 年前

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

    但是,您可能还引用了Web服务单独执行的、包含相同类型的库。这是调暗驱动程序时需要的类型。这就是不匹配的原因。

        2
  •  0
  •   hangy    16 年前

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