2009-08-14 88 views
2

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

我简单了解人们可以在他们的项目中为我的类库制作“服务引用”,然后他们开始使用它。

我该如何实现这个目标?

+0

...和你的问题是什么? – 2009-08-14 09:14:56

+0

@All:我认为这是一个真正的问题,只是有点困惑。OP似乎认为揭露他的班级图书馆会给他的客户提供一个班级图书馆的副本。然而,他之前使用过“添加服务参考”,并认为它没有完成。他想知道他做错了什么。 – 2009-08-14 09:41:40

回答

2

如果您还没有完成这个还没有,你可以不启动从一个大错救自己。

类库被设计成类库。服务旨在成为服务。他们是不同目标的两种不同的东西。

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

这些事情都没有任何意义暴露在服务!

相反,你应该做的是设计你的服务,以暴露你想暴露的功能。为了做到这一点,服务当然会使用你的类库。

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

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

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

+0

非常感谢,这绝对有道理。 – Bhaskar 2009-08-14 10:14:23

+0

我知道我迟到了3年,但希望你会看到这个消息。如果您要将程序集附加到服务中以执行所有POCO类型的行为,那么您将如何将类似对象发送回客户端以供使用?只需在界面中创建一个仅具有属性的对象并将其来回传递以进行修改?或者还有其他一些做法吗?我被困在这种情况下,我需要使用库来处理服务中的事情。我正在寻找某种最佳实践。 – Sinaesthetic 2012-05-23 14:39:30

+0

@Sinaesthetic:你需要提出一个问题。这是一个问答网站,而不是论坛。 – 2012-05-23 14:42:09

1

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

对于枚举,你将不得不添加[EnumMember]属性,例如:

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

WCF的整个主题是有点过于宽泛,涵盖所有在这里虽然。只要看看会发生什么情况,如果遇到麻烦,请提出更具体的问题。

+0

什么是bindinf方法,它会是一个wsHttpBinding或nrtTcpBinding。你能提供一些链接,可以指导我这样做。 – Bhaskar 2009-08-14 09:34:20