WCF:一致栽特别就此来构建分布式系统(指区区只可执行程序需要彼此数据)的API,通过动用WCF我们虽可以采取大量底技术来以劳动公开为调用者。

WCF基本组成
 
1.WCF服务程序集:向外部用户公开整体效果的类和接口(包含了森WCF契约以及他们的贯彻)
 
2.WCF劳动宿主:承载WCF服务程序集的实业(可以是任何.net可执行程序,如控制台
winform wpf等)
 
3.WCF客户端:通过中代理访问服务的应用程序(可以是任何.net可执行程序)

WCF中的ABC
 
1.地点(Address):服务之职位,可以硬编码到程序集中(System.Uri类型)或分开到.config文件中
  2.绑定(Binding):WCF附带了成百上千绑定,每一个还针对特定的待
           ——基于HTTP的绑定(数据因XML格式编码):
                a.BasicHttpBinding  :用来构建符合WS-Bssic
Profile的WCF服务,使用HTTP作为传输,使用Text/XML作为默认的消息编码
                b.WSHttpBinding:和 BasicHttpBinding
相似,但提供了双重多WEB服务特色
                c.WSDualHttpBinding:和WSHttpBinding 相似,用于双向契约
           ——基于TCP的绑定(数据以老二上前制格式编码):
               
a.NetNamedPipeBinding:用于平机器.net应用程序之间的平安通信
                b.NetPeerTcpBingding:提供了P2P网络应用程序的安全的绑定
               
c.NetTcpBingding:适合.net应用程序跨机器通信的安的优化的绑定
           ——基于MSMQ的绑定
  3.契约(Contract):WCF服务对外接口的概念跟声明

开创一个WCF实例
  1.构建WCF服务

    style=”color: #008000″>//添加此特性以便使接口成为服务
    [ServiceContract]
    interface IService
    {
       
//WCF方法必须下这个特性来修饰
        [OperationContract]
        string Result(string str);
    }

    public class Service : IService   style=”color: #008000″>//实际上构建WCF服务吗并不一定使用接口,可以将[ServiceContract]
[OperationContract]直白采用及劳动类及

    {
        public Service()
        {
            Console.WriteLine(“the service await your input…”);
        }
        public string Result(string str)
        {
            return “Hello ” + str;
        }
    }

  
—————————不采用接口构建WCF服务如下—————————-
                [ServiceContract]
                public class ServieTypeContract
                {
                     [OperationContract]
                     void SomeMethed(){}
                }

 

 
2.承载WCF服务(*极致是出于Windows服务要IIS虚拟目录承载,此处使用控制高举行宿主)*
     基本步骤:
     a.在宿主的布置文件中,定义所承接的WCF服务的终结点(endpoint)
        
——MEX(元数据交换,一个WCF服务行为)默认是倒闭的,会通过HTTP
GET拦截任何元数据请求,如果想允许VS来机关创建必要的客户端代理.config文件就非得启用MEX

        <system.serviceModel>
        <services>         
//包含了由宿主公开的WCF服务之集

          <service name=”WCF_Test.Service”
behaviorConfiguration=”WcfTestServiceBehavior”> 
//通过behaviorConfiguration关联服务及表现
            <endpoint address=””     
//为空
则打<baseAddresses>中拿走地址,也只是为绝对地址或设置相对地址

                      binding=”basicHttpBinding”
                      contract=”WCF_Test.IService”/>

            <endpoint address=”mex”             style=”color: #008000″><!– 启用MEX第一步 –>
                      binding=”mexHttpBinding”
                      contract=”IMetadataExchange”/>
           
            <!–
于特别的地方列有装有的根地址 –>

            <host>
              <baseAddresses>
                <add
baseAddress=”http://localhost:8899/WcfTestService"/&gt;  style=”color: #008000″>//由驻地址http://localhost:8899  + 
可选的URI组成

              </baseAddresses>
            </host>

          </service>
        </services>

        <behaviors>   <!–
行为容许我们愈限制宿主服务还是客户端的效用 –>

          <serviceBehaviors>
            <behavior name=”WcfTestServiceBehavior”>
              <serviceMetadata httpGetEnabled=”true”/>   style=”color: #008000″><!– 启用MEX第二步–>
            </behavior>
          </serviceBehaviors>
        </behaviors>

      </system.serviceModel>

     b.通过编程使用ServiceHost类去供了点所提供的色

        static void Main(string[] args)
        {
            Console.WriteLine(“**** WCF Host****”);
           
//创建ServiceHost实例并通报其宿主时谁WCF服务
            using (ServiceHost serviceHost=new
ServiceHost(typeof(Service)))
            {
                serviceHost.Open();
                Console.WriteLine(“the service is ready…..”);
                Console.WriteLine(“Press the enter key to stop
it.”);
                Console.ReadLine();
            }

            Console.ReadLine();
        }

     c.确保宿主保持运行状态,以拍卖所收的客户端的请

        在浏览器被输入http://localhost:8899/WcfTestService 
便可视服务之有关细节

  3.构建客户端应用程序
     a.新建一个控制台应用程序
    
b.确保宿主运行状态,添加服务引用,输入http://localhost:8899/WcfTestService,引用服务后客户端.config文件自动是配置好的如下

        <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name=”BasicHttpBinding_IService” />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint
address=”http://localhost:8899/WcfTestService”
binding=”basicHttpBinding”
                bindingConfiguration=”BasicHttpBinding_IService”
contract=”ServiceReference1.IService”
                name=”BasicHttpBinding_IService” />
        </client>
        </system.serviceModel>

     c.客户端编码如下

        static void Main(string[] args)
        {
            Console.WriteLine(“***** The client
*****\n”);
            using (ServiceReference1.ServiceClient client=new
ServiceReference1.ServiceClient())
            {
                Console.WriteLine(“please input a name…”);
                string name = Console.ReadLine();
                string result = client.Result(name);
                Console.WriteLine(“The Service Say : {0}”,result);
            }
            Console.ReadLine();
        }

     d.运行应用程序得到近似如下的结果
         
          The Service Say : Hello  rock(你输入的名字)

 

基本上复绑定公开单独的WCF服务(使用简化配置配置.config文件,
.net 4.5后头出现的新特性)

 

   <system.serviceModel>
    <services>
      <service name=”WCF_Test.Service” >
        <!–
使用默认绑定好去除所有的endpoint元素和MEX指定的数 –>

        <host>
          <baseAddresses>
            <add
baseAddress=”http://localhost:8899/WcfTestService"/&gt;
            <add baseAddress=”net.tcp://localhost:8088″/>  
<!–
添加额外的TCP绑定–>

          </baseAddresses>
        </host>
      </service>
    </services>
   
    <!– 添加bingding元素 
不要安排name值 这样就见面动用默认的布局 –>

    <bindings>
      <basicHttpBinding>
        <binding />
      </basicHttpBinding>
      <netTcpBinding>
        <binding closeTimeout=”00:00:15″/>   style=”color: #008000″> <!– 可以指定一些binding属性
不点名将使用默认属性–>

      </netTcpBinding>
    </bindings>
   
    <behaviors>
      <serviceBehaviors>
        <behavior>   <!–
serviceMetadata元素不要设置name的价值,这样就是可以运行时得默认的MEX支持
–>

          <serviceMetadata httpGetEnabled=”true”/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

 

   —————————关于MEX行为配置 ———————–
      
代理生成工具要以运转时意识服务,才能够起工作.在WCF中,可以经启用MEX来允许这种运行时意识
   
而且多数宿主配置文件还需启用MEX,因为咱们充分少修改MEX配置,所以最快捷的道尽管是运默认MEX配置

   ——————————————————————

  ———————-  .net4.5为晚也哪可以使默认配置 

      
因为.NET4.5来一个默认的machine.config文件,该文件指出了不指定WCF绑定时用采取的默认绑定

      <system.serviceModel>
     <protocolMapping>
          <add scheme=”http” binding=”basicHttpBinding”/>
          <add scheme=”net.tcp” binding=”netTcpBinding”/>
          <add scheme=”net.pipe”
binding=”netNamedPipeBinding”/>
          <add scheme=”net.msmq” binding=”netMsmqBinding”/>
        </protocolMapping>
      </system.serviceModel>

 

 

 

 

 

 

 

 

 

相关文章

网站地图xml地图