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地图