【问题标题】:Expose a Class Library as a WCF Service将类库公开为 WCF 服务
【发布时间】:2009-08-14 09:13:30
【问题描述】:

我有一个类库,我想将它作为 WCF 服务公开给外界。我的类包含抽象类、普通类、枚举等。

我希望人们可以在他们的项目中对我的类库进行“服务引用”并开始使用它。

我如何做到这一点?

【问题讨论】:

  • ...你的问题是什么?
  • @All:我认为这是一个真正的问题,只是有点困惑。 OP 似乎认为公开他的类库与给他的客户一个类库的副本具有相同的效果。然而,他以前使用过“添加服务引用”,但发现它并没有实现这一点。他想知道他做错了什么。

标签: c# wcf


【解决方案1】:

如果你还没有完成这个,你可以通过不开始来避免一个大错误。

类库被设计成一个类库。服务被设计为服务。它们是具有不同目标的两种不同的事物。

例如,您可能已经定义了一个枚举、一个具有该枚举类型属性的 EventArgs 派生类,以及一个采用该 EventArgs 类型的事件处理程序委托,并且您可能有一个或多个公开事件的类使用该委托类型。

在服务中公开这些东西都没有任何意义!

相反,您应该做的是设计您的服务以公开您想要公开的功能。为此,该服务当然会使用您的类库。

类库和服务之间的一个不同之处在于,服务应该被设计成可以跨平台使用。考虑当 Java 客户端使用您的服务时会发生什么:它将有一个代理类,对应于您的服务公开的操作。这些代理方法将具有原始类型的参数,以及与传入和传出服务的数据结构相匹配的代理类型的参数。

Java 客户端显然不会使用与您的服务器端操作相同的 .NET 类型!

构建 .NET 客户端的默认方式完全相同 - 通过代理类。您的问题表明您希望公开类库会将实际类导出到客户端。事实并非如此。如果您决定将客户端耦合到服务器使用的确切 .NET 类,那么客户端将需要具有服务器端程序集,就像客户端使用普通类库一样。

【讨论】:

  • 非常感谢,这绝对是有道理的。
  • 我知道我迟到了 3 年,但希望你能看到这条消息。如果您要将程序集附加到服务以执行所有 POCO 类型的行为,那么您将如何将类似的对象发送回客户端以供使用?只是在界面中制作一个光属性对象并来回传递以进行修改?还是有其他的做法?我陷入了这种情况,我需要使用图书馆来处理必须提供服务的东西。我在这里寻找某种最佳实践。
  • @Sinaesthetic:你需要问一个问题。这是一个问答网站,而不是论坛。
  • 在这种情况下,当我倾向于关闭问题时,标记为“重复”。我认为在这篇文章中提问会更容易,因为它与这个 OP 直接相关
  • @Sinaesthetic:在评论中提问更糟糕。
【解决方案2】:

类和枚举可以通过 WCF 公开。然而,抽象类将是一个问题,但无论如何将它们公开为服务是没有意义的。

对于枚举,您必须添加[EnumMember] 属性,例如:

public enum Sex
{
    [EnumMember]
    Unknown,
    [EnumMember]
    Male,
    [EnumMember]
    Female
}

不过,WCF 的整个主题有点过于宽泛,无法在这里涵盖所有内容。看看会发生什么,如果遇到麻烦,请提出更具体的问题。

【讨论】:

  • bindinf 方法是什么,是 wsHttpBinding 还是 nrtTcpBinding。您能否提供一些链接,可以指导我这样做。
【解决方案3】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2013-01-09
  • 2012-05-05
相关资源
最近更新 更多