如何从相同的客户端代码在两个.NET Web服务中的任何一个上调用相同的webmethod

时间:2016-06-25 11:37:09

标签: vb.net web-services inheritance soap

我有两个.NET SOAP Web服务,其中包含各种方法。其中,它们有一些共同之处,例如:

<WebMethod(EnableSession:=True)> _
Public Function DoStuff() As Long
   'Do server-side stuff
End Function

,我希望能够在相同客户端代码的 中调用此方法,该代码在不同情况下使用。

我试过这个:

  • 使两个Web服务都继承自父服务
  • 覆盖每个方法中的相关方法

我能够做到并编译。

但是,当我在两个单独的场景中的每个场景中实例化相关的子Web服务时,打算将它作为参数或属性传递给重用的客户端代码,类型转换失败,表示子类型可以&# 39; t被转换为父类型。

这种方法原则上是否可行?

1 个答案:

答案 0 :(得分:0)

我不相信您所建议的基本设置可以提供您所建议的内容。

当您向项目添加服务引用时,Visual Studio会为传入的参数创建代理对象。例如,如果查看用于MyService1.DoStuff的参数,您将看到它的类型是MyService1.DoStuffParameter,MyService2.DoStuff的参数为MyService2.DoStuffParamter。因此,这两个参数是不同的(无论它们是否具有相同的属性)。

有两种方法可以解决这个问题......

  1. 将类库添加到Web服务解决方案并在其中定义DoStuffParameter,然后引用客户端应用程序中的类库。您将在下次更新服务引用时注意到Visual Studio能够意识到您的客户端已经知道MyClassLibrary.DoStuffParameter是什么,因此不会代理它。相反,intellisence将显示两个服务的参数类型现在是MyClassLibrary.DoStuffParameter。

  2. 可能是一个更简单的解决方案,让第三个服务接受DoStuffParameter,以及它需要去哪个子服务。然后,您的客户端应用程序中只有一个服务引用,这意味着它总是相同的类型。