WCF 第一章 基础 使用代码生成WCF服务

完成一个WCF服务,你要完成一个.NET 类然后使用System.ServiceModel 属性来修饰这个类。System.ServiceModel 命名空间与.NET 3.0 一起安装而且包含了大多数WCF实现。当代码编译时,CLR(公共语言运行库)解释这些属性,使用运行时代码取代它们。对于.NET来说属性并不是新事物; 在.NET 1.0 时它们已经存在了。WCF,就像.NET 1.0,1.1和2.0 中的ASMX,当写服务时使用属性来提高我们的生产力。

  列表1.1 中显示了寄宿在控制台应用程序的WCF服务的完整代码。在这个例子中,我们做了以下工作。

      定义契约。写一个.NET 类做一些有用的工作然后使用WCF属性修饰它。[ServiceContract]属性标识一个类为契约。在标准WSDL(网络服务描述语言)里,[ServiceContract]定义portType. [OperationContract]属性定义可以在类中通过服务接口反射调用的方法。同时定义了这些类的方法中使用的来往消息。WSDL描述,[OperationContract]定义了操作和消息。在1.1到1.3列表中使用一个仅有一个叫GetPrice方法的名为StockService 的类。

注意
这本书中的例子使用非常简单的接口,通常接收返回一个单独的字符串或数字。实际应用中,你的服务操作很可能接收返回复杂的类型。线上通信将会更“臃肿”而不是“健谈”,降低了网络传输和回复能力。这需要在每次调用时传输更多信息,需要复杂的输入和返回值类型。

  定义一个终结点。在终结点定义中,我们将通过使用ServiceHost.AddServiceEndpoint 方法确定一个地址,绑定和契约.地址是空的,意味着终结点的地址和基地址或者服务的相同。绑定类型是basicHttpBinding,与使用WS-I BP 1.1 协议构建的XML Web Services 兼容,可以互操作。WS-I 或Web Services, 是几大主要的系统厂商合作的结果,包括微软,IBM,BEA,Oracle以及其他一些组织,定义了共同协议层次。WS-I 不是定义了标准;它提供了指导以及工具去确认软件是否符合现存标准,比如HTTP 和XML.

  在一个进程中寄宿服务以便于它可以监听新来的请求。在1.1到1.3列表中使用ServiceHost 类在控制台应用程序中寄宿服务。服务在http://localhost:8000/EssentialWCF 处监听。

列表 1.1 完全使用代码实现服务

using System;

using System.ServiceModel;



namespace EssentialWCF

{

    [ServiceContract]

    public interface IStockService

    {

        [OperationContract]

        double GetPrice(string ticker);

    }



    public class StockService : IStockService

    {

        public double GetPrice(string ticker)

        {

            return 94.85;

        }

    }



    public class service

    {

        public static void Main()

        {

            ServiceHost serviceHost = new ServiceHost(typeof(StockService),

                new Uri("http://localhost:8000/EssentialWCF"));

            serviceHost.AddServiceEndpoint(

                typeof(IStockService),

                new BasicHttpBinding(),

                "");

            serviceHost.Open();



            Console.WriteLine("Press <Enter> to terminate.\r\n");   

            Console.ReadLine();

            serviceHost.Close();

        }

    }

}

你可能感兴趣的:(代码生成)