在C#中跨两个Web服务引用访问同一个类

时间:2010-11-09 19:36:05

标签: c# web-services generics types

我正在尝试创建一个可以在同一个类上调用相同方法的C#类,但这些类可以来自两个不同的Web服务引用。我正在访问SomeWebServiceSomeWebServiceAlt,它们具有相同的类但位于不同的服务器上。我们的目标是首先尝试使用SomeWebService中的方法,如果那个方法退出,则尝试SomeWebServiceAlt。我希望有一些通用类来访问任何一个Web服务,但我遇到类型约束的问题,因为我没有任何公共接口或基类用于我在任一引用中使用的不同类。也就是说,我使用ConnectionClass命名空间和SomeWebService命名空间中的SomeWebServiceAlt,但是这两个ConnectionClass类不被C#看作是相关的,所以我不能只要说where TClass : CommonBaseClassAcrossWebServices。我该怎么做?我最终重复代码并做:

if (typeof(SomeWebService.ConnectionClass) == typeof(TConnection))
{ ... }
else if (typeof(SomeWebServiceAlt.ConnectionClass) == typeof(TConnection))
{ ... }

这看起来真的多余而且很脏。我正在使用.NET 3.5,而且我无法控制这两个Web服务。这是我的问题和我在这里看到的类似问题之间的区别:其他人控制了网络服务。

我觉得我的解决方案最终会使用反射以某种方式检查并查看是否存在预期的方法,然后在我正在使用的任何Web服务的类上调用该方法。

3 个答案:

答案 0 :(得分:2)

如果它们共享相同的服务定义,则可以使用相同的引用,只需在运行时更改主机即可。

答案 1 :(得分:0)

如果您使用的是Web引用,那么您运气不佳。

使用服务参考,您可以告诉它重用数据类型。然后,您必须确保您的消费应用程序可以访问数据类型。

答案 2 :(得分:0)

我知道这已经老了,但我一直回到这里。我想调用一个可以在客户端命名不同的Web服务,不同的服务名称和不同的服务端点,但下面是相同的合同。我不需要动态确定任何内容,只需从不同的名称/端点调用它。答案在这里,但很难理解。 1.当您将它附加到项目时,您应该将其设置为服务引用而不是Web引用。只附一个版本。
2.在运行时,也许从应用程序设置中,您可以使用具有相同合同但名称不同的服务的端点替换服务的端点。                    svc2.Endpoint.Address = new System.ServiceModel.EndpointAddress(WebConfigurationManager.AppSettings [“client_service_endpoint”]。ToString());

这将调用位于不同端点的其他Web服务,而不管服务名称。

干杯!