您的位置:知识库 » .NET技术

WCF分布式开发步步为赢(2)自定义托管宿主WCF解决方案开发配置过程详解

作者: Frank Xu Lei  来源: 博客园  发布时间: 2009-04-01 00:11  阅读: 6935 次  推荐: 0   原文链接   [收藏]  
【2】WCF服务类的开发过程:

    要创建WCF服务解决方案,首先应该定义服务类,并编写服务类的相关的代码。我们这里把服务类创建类单独的类库项目,托管宿主程序项目引用服务类的程序集。

2.0】创建WCF服务类库项目:

    WCF服务类库项目的创建非常简单,Visual Studio 2008为我们提供了便捷的方式,选择新建项目,选择--WCF服务类库项目项目,输入项目名称,选择保存位置就可以。如图:

     当然我们也可以建立空项目,但是程序集引用等操作要手动完整,过程相对复杂。这里我们选择的使用创建向导方式。

System.ServiceModel和System.Runtime.Serialization程序集对WCF服务至关重要,因为后续服务契约、操作契约和数据契约等特性定义都在这两个程序集中。我们在新建的项目引用中可以看到:

    使用WCF契约相关的属性,必须显示引用这两个命名空间.语句如下:

  using System.ServiceModel;
  using System.Runtime.Serialization;

   如果不添加命名空间引用程序集,编写的代码会出现错误,无法通过。

2.1】服务契约和操作契约:

    WCF服务类库创建完毕后,我们可以来进行代码的实际编写。我们知道,每个WCF服务类均需实现一些方法,以供其客户端使用。服务类的创建者通过将这些方法包含在某个服务契约中,来决定将哪些方法公开为客户可调用的操作。服务契约就是显示指定的服务必须实现的用户可以使用的操作。

   ServiceContract 属性以及 WCF使用的所有其他属性均在 System.ServiceModel 命名空间中定义,类声明使用 using 语句来引用该命名空间。服务类中可被客户端调用的每个方法都必须使用名为 OperationContract 的另一个属性加以标记。服务类中带有前置 OperationContract 属性的所有方法都将自动被WCF公开为 SOAP 可调用操作。

    WCF中最基本的属性是 ServiceContract。实际上,WCF服务类本身就是标记有 ServiceContract 属性的类或者是实现了标记有该属性的接口的类。我们使用的还是上次的代码:

    首先是服务契约IWCFService,定义了连个操作,添加[OperationContract]属性标记

 //1.服务契约
    [ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
    
public interface IWCFService
    {
        
//操作契约
        [OperationContract]
        
string SayHello(string name);
        
//操作契约
        [OperationContract]
        
string SayHelloToUser(User user);

    }

    其次定义WCF服务类,继承服务契约,实现服务契约中声明的操作,具体代码如下:

 //2.服务类,继承接口。实现服务契约定义的操作
    public class WCFService : IWCFService
    {
        
//实现接口定义的方法
        public string SayHello(string name)
        {
            Console.WriteLine(
"Hello! {0},Using string ", name);
            
return "Hello! " + name;
        }
        
//实现接口定义的方法
        public string SayHelloToUser(User user)
        {
            Console.WriteLine(
"Hello! {0}    {1},Using DataContract ", user.FirstName, user.LastName);
            
return "Hello! " + user.FirstName + " " + user.LastName;
        }
    }

    服务类里给出了服务契约里声明的方法,也就是操作,这里都给出了具体的实现。SayHello()和SayHelloToUser(User user)方法都将自动被WCF公开为 SOAP 可调用操作。客户端可以调用相应的操作。

2.2】数据契约:

    数据契约定义类型如何转换为适合标准信息格式,即“序列化”过程。实际上,数据契约是控制数据如何序列化的一种机制。 在 WCF 服务类中,数据契约使用 DataContract 属性来定义。标记有 DataContract 的数据类、结构或其他类型都可以拥有一个或多个带有前置 DataMember 属性的成员,指示该成员必须被包含在此类型的序列化值中。不显示指定的成员不被包含在序列化数据中。这里我们定义的数据类,包含三个成员,代码如下:

    //3.数据契约//序列化为XML,作为元数据封装到服务里
    [DataContract]
    
public struct User
    {
        [DataMember]
        
public string FirstName;

        
public string MiddleName;//不会被传递
        [DataMember]
        
public string LastName;
    }

    由于是类库项目,所以主要涉及的内容是契约的定义和服务类的实现过程。配置的关键部分也是契约属性的标记。

    不涉及配置文件的使用和定制,如果是应用程序,需要配置对应的Config文件。

0
0
标签:WCF

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻