同洲共际海让路@小舟侧盼千帆过,扬帆寻她千百度
+U, 抬头仰望,低头思索@同洲共际海让路

WCF Part 2 : Defining contract, 原文

    在上篇文章中,我们粗略讲述了WCF的ABC(Address, Binding and Contract)。 本章讲述契约(Contract)。

    契约是在需要在类上显式定义的,只要给类加上[ServiceContract]属性即可. 在服务中,给方法加上[OperationContract]属性,即可暴露出来以供外部使用, 因为在服务中,方法是被称为操作的(operationsas)。

[ServiceContract]

public class Hello

{

    [OperationContract]

    string HelloWorld()

    {

        return "Hello world";

    }

    string HelloComputer()

    {

        return "Hello computer";

    }

}

     操作也是需要被显式地进行定义的,一个面向服务的规定。在上面的服务中,HelloComputer对于我们服务的使用者而言是不可见的,因为他没有使用[OperationContract]属性进行标注,而HelloWorld却是对外可见的,即使在.NET中,他的限定符为private。

接口(Interfaces)
     实际上,通常将接口作为契约,具体的服务实现只需实现这个接口即可。这样做的好处有:

  • 接口能够扩展/继承其他接口
  • 一个类可以实现多个接口
  • 可以在不违反契约的情况下修改服务的实现
  • 可以通过不同版本的接口来对服务的版本进行控制

     综上所述,最好的做好就是用接口并且实现这个接口。上面提到的两个属性,也必须显式地在接口中指定。

[ServiceContract]

public interface IHello

{

    [OperationContract]

    string HelloWorld();

    string HelloComputer();

}

public class Hello : IHello

{

    string IHello.HelloWorld()

    {

        return "Hello world";

    }

    string IHello.HelloComputer()

    {

        return "Hello computer";

    }

}

    在下一篇文章中,我们将看到如何host这个服务。在接下来的系列文章中,我们还会继续使用到这个服务,并且对上面说到的版本控制进行演示。

posted on 2007-11-26 23:10  同洲共际海让路  阅读(1755)  评论(1编辑  收藏  举报