【问题标题】:Many WebReferences Using Same Class许多 WebReferences 使用相同的类
【发布时间】:2010-07-01 15:04:12
【问题描述】:

我有一个 C# 项目,其中包含对第三方产品的许多 Web 引用。所有这些 Web 服务调用都使用“用户上下文”类。所以每个 Web 服务都接受完全相同的 XML sn-p。

目前,当我点击所有不同的 Web 服务调用时,我必须保留许多这些“用户上下文”对象。生成的“用户上下文”类完全相同,只是放在不同的 .NET 命名空间中(XML 命名空间相同)。

我希望能够只传递这些实例中的一个。我怎么能这样做?

我正在使用 Visual Studio 2010 并通过添加 WebReference 来使用生成的类。我不反对使用其他一些框架或机制。我什至想过编写自己的代码,但是我需要使用许多 WebService(每个都有许多 Web 方法)。

更新:我最初是通过添加 Web 引用来添加这些的,现在我将它们添加为服务引用。 Web 服务本身通过 InterSystems Caché 公开,我还没有研究它们与 WS-I 的符合程度。

【问题讨论】:

  • +1 我也遇到过这种情况,最终使用 Automapper 根据需要将特定于命名空间的类版本相互复制——它有效,但我确信有更好的方法......

标签: c# web-services visual-studio-2010 code-duplication generated-code


【解决方案1】:

不确定 VS 2010,但在 2008 年,服务引用添加向导中有一个选项“在引用的程序集中重用类型”,它可以满足您的需要。为了在所有 Web 引用中具有相同的类型,请创建一个程序集,将这些类型定义放在那里,从您的项目中引用它,然后添加您需要的 Web 引用。

【讨论】:

  • 我以前没有看过这些选项,所以我尝试了它们并阅读了它们。我不认为这对我有用。根据我的阅读,这通常与已在共享类库中定义的类型(我没有)有关。这些类型是 Web 服务本身的一部分,而不是我编写或有权访问的任何共享库。如果我对此选项的功能有误,请赐教。
  • 这个选项你说的很对,但是你错过了一件事:你可以自己创建必要的共享类库。实际上非常简单: 1. 创建类库项目 2. 将 Web 引用添加到您希望共享的类型的任何服务,将访问级别设置为公共 3. 在您的项目中引用这个类库。就这样。从现在开始,您将添加到项目中的所有 Web 引用都将使用您的类库中的类型。
  • 我会接受你的回答,但对我来说还是不太成功。我创建了一个简单的 WCF 服务,并且能够限制创建的重复代码的数量,这就是您的建议。但是,对于我试图对此进行编码的 Web 服务不起作用。一定有别的东西阻止了它的工作。
【解决方案2】:

我通过只使用一个类并使用 XML 序列化/反序列化转换对象来解决这样的问题。但这仍然不是完美的解决方案。

【讨论】:

    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多