我有两个.NET SOAP Web服务,其中包含各种方法。其中,它们有一些共同之处,例如:
<WebMethod(EnableSession:=True)> _
Public Function DoStuff() As Long
'Do server-side stuff
End Function
,我希望能够在相同客户端代码的 中调用此方法,该代码在不同情况下使用。
我试过这个:
我能够做到并编译。
但是,当我在两个单独的场景中的每个场景中实例化相关的子Web服务时,打算将它作为参数或属性传递给重用的客户端代码,类型转换失败,表示子类型可以&# 39; t被转换为父类型。
这种方法原则上是否可行?
答案 0 :(得分:0)
我不相信您所建议的基本设置可以提供您所建议的内容。
当您向项目添加服务引用时,Visual Studio会为传入的参数创建代理对象。例如,如果查看用于MyService1.DoStuff的参数,您将看到它的类型是MyService1.DoStuffParameter,MyService2.DoStuff的参数为MyService2.DoStuffParamter。因此,这两个参数是不同的(无论它们是否具有相同的属性)。
有两种方法可以解决这个问题......
将类库添加到Web服务解决方案并在其中定义DoStuffParameter,然后引用客户端应用程序中的类库。您将在下次更新服务引用时注意到Visual Studio能够意识到您的客户端已经知道MyClassLibrary.DoStuffParameter是什么,因此不会代理它。相反,intellisence将显示两个服务的参数类型现在是MyClassLibrary.DoStuffParameter。
可能是一个更简单的解决方案,让第三个服务接受DoStuffParameter,以及它需要去哪个子服务。然后,您的客户端应用程序中只有一个服务引用,这意味着它总是相同的类型。