服务合同(接口)是否应该向客户公开?

时间:2010-10-20 05:29:02

标签: wcf

在学习WCF的过程中。

举例来说,假设我有3个组件:

1。)Service.Contract:它具有接口MyType IMyInterface()的定义;

2。)服务:它具有MyType MyService()接口的实现:IMyInterface;

3.。客户:它调用该服务。

我的基本问题是'Service.Contract'项目应该暴露给'Client'项目,因为它需要知道接口的原型。如果是,是否不符合SOA原则?如果不是,那么我们如何使用端点地址实现对服务的调用?

2 个答案:

答案 0 :(得分:1)

是。接口需要暴露给客户端。否则,客户端不知道服务上有哪些方法可用。

有些工具可用于从服务的元数据中为您生成接口代码(假设您公开了服务数据),因此客户端不需要实际的接口文件。这基本上是当您使用Visual Studio(或其他开发工具)并使用“添加服务引用”时发生的情况。

或者,有一个命令行工具随dotNet一起提供 - SvcUtil.exe:
http://msdn.microsoft.com/en-us/library/ms733133.aspx
http://en.csharp-online.net/WCF_Essentials%E2%80%94Generating_the_Proxy

我不知道这会如何违反SOA原则。正如我先前的评论所说。如果客户不知道实施的合同是什么,客户如何知道如何调用您的服务?

答案 1 :(得分:0)

一般方法是向项目添加服务引用,该引用创建基于客户端的类,这些类实现已发布的数据协定和客户端调用函数。实际上,您并未使用定义服务的接口或定义数据协定的类。