wcf配置文件介绍



  
    
  
  

    
    
      
        
          
            
          
        
      
    

    
    
      
        

        
      
    

    
    
      
        
      
    

  

上例将配置信息写入到了xml中,分别添加了一个服务的binding、service和behavior,在添加时往往是自下向上添加,首先添加一个binding配置信息,然后添加相应的behavior行为,最后添加一个service并把绑定信息添加到其中。

service

service主要是用来配置endpoint和host的,它实际上代表了为程序集添加了一个服务的引用,其中的endpoint指定了服务的地址、绑定和协议,host则提供了服务寄宿的方式。
如下配置:


  
    
      
        
      
    
    
  

在上面的代码中添加了一个service,并为service配置了一个host该host的应用程序即为当前引用服务的程序集。最后添加了一个endpoint,终结点中绑定了URI,URI的地址就是WCF的定义地址,其中的binding是指定了基本的绑定类型,另外还使用contract指定了服务契约的接口。

binding

service是对服务进行的配置,指定了服务的一些配置信息,另外很重要的和service同级还有binding,它是对消息访问方式做的一些配置。
1、绑定方式
分为系统自带的绑定和用户自定义绑定两种,系统自带的绑定包括basicHttpBinding、WcHttpBinding等。
如果系统提供的绑定功能不完全,那么也可以使用用户自定义的绑定功能,可以使用customBinding对象从预先存在的绑定元素中创建新的绑定,也可以通过从Binding派生类来创建完全由用户自定义的绑定。
2、基本功能
绑定除了定义绑定的方式外,还可以指定传输协议的类型、安全性、编码方式和事务等,通过绑定来配置WCF的基本操作类型,这样能够对服务做详细的一些配置,使服务的功能更加健全。



  
    
      
        
          
            
            
            
          
        
        
        
        
      
    
    
      
        
          
        
      
    
  

Behavior

行为属性,行为属性可以控制服务的运行时特性,主要分为服务行为和操作行为,这些行为或特性,可以通过配置runtime属性配置文件,或自定义行为来实现。



  
    
      
        
          
            
            
            
          
        
        
        
        
        
      
    
    
      
        
          
          
          
          
          
        
      
    
  

Note:serviceMetadata 是一种元数据启用功能,它是配置元数据终结点,默认情况下是不公开元数据的,但是可以通过启用配置来公开元数据的终结点。
上面的代码都是使用的是配置文件做的服务的配置部署,另外也可在程序中编写代码来配置部署信息,但是并不赞成这种配置方式,因为这种配置方式不易更改,当你部署到客户环境后就不能再更改内部的代码结构,所以这种方式很不灵活,并不提倡使用这种方式来配置服务,但是可以作为了解,如下代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(ServiceReference1.Service1Client)))
            {
                host.AddServiceEndpoint(typeof(ServiceReference1.IService1),
                new WSHttpBinding(), "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1");
                if (host.Description.Behaviors.Find() == null)
                {
                    ServiceMetadataBehavior serviceMetadata = new ServiceMetadataBehavior();
                    serviceMetadata.HttpGetEnabled = true;
                    serviceMetadata.HttpGetUrl = new Uri
                    ("http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/metadata");
                    host.Description.Behaviors.Add(serviceMetadata);
                }

                host.Open();

                ServiceReference1.IService1 service1 = new ServiceReference1.Service1Client();
                service1.GetData(1);
                Console.Write("fdsf");
                host.Close();
            }
        }
    }
}

上面的代码中使用的是WSHttpBinding方式它支持双工通信,另外上面的宿主方式使用的是ConsoleApplication Host,这种host方式非常简单。在创建宿主程序时,需要为宿主指定宿主服务的类型,这里的类型要使用实现服务的类,最好不要使用接口类型。
创建宿主对象后,接下来为宿主添加了一个服务的终结点,终结点中第一个参数是指定了协议实现的类型,本例使用的是接口协议,所以要配置为相应的接口类型;第二个参数指定了绑定的类型;第三个参数则指定了终结点的URI地址,URI地址要配置服务具体实现的类URL地址。
接下来为宿主添加了一个行为(Behavior),并为行为公开了元数据,这种行为在创建时也可以不强加给服务,也就是说在添加宿主时,服务的行为定义是可选的,也可以不定义。

下面为几个wcf实例:

实例一:

定义服务协定,建立类库项目名为:Ch25Ex04Contracts

namespace Ch25Ex04Contracts
{
    [ServiceContract(SessionMode=SessionMode.Required,CallbackContract =typeof(IMessageChangeCallback))]
    public interface IMessageChange
    {
        [OperationContract(IsOneWay = true)]
        void Send(string message);
    }

    [ServiceContract]
    public interface IMessageChangeCallback
    {
        [OperationContract(IsOneWay = true)]
        void Receive(string message);
    }

//下面为数据协定,定义数据协定的数据才能传输

[DataContract]
    public class CompositeType
    {
        
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

}

服务端:建立控制台应用程序名为:Ch25Ex04Host

先实现服务

namespace Ch25Ex04Host
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“MessageChange”。
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class MessageChange : IMessageChange
    {
        public void Send(string message)
        {
            Console.WriteLine("服务端监听客户端发出的消息:" + message);
            Callback.Receive(message);
        }

        IMessageChangeCallback Callback
        {
            get
            {
                return OperationContext.Current.GetCallbackChannel();
            }
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            MessageChange tem = new MessageChange();
            using (ServiceHost host = new ServiceHost(tem))
            {
                host.Opened += delegate { Console.WriteLine("服务已经启动,按任意键终止!"); };
                host.Open();
                Console.Read();
            }
        }
    }
}

服务端配置文件

 
   
     
       
         
         
       

       
         
         
       

     

   

    
   
   
     
       
         
          
       

     

       
       
      
   


 

你可能感兴趣的:(c#,wcf配置文件,wcf实例)