亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

WCF不得不清楚的概念

系統(tǒng) 1813 0

1、地址( address

WCF中地址以統(tǒng)一資源標(biāo)識(shí)符(URI)的形式指定,它用來(lái)標(biāo)識(shí)消息發(fā)送和接受的目的地,并且它由 通訊協(xié)議 位置路徑 兩部分組成。例如: http://192.168.1.1:8000/ 表明通訊協(xié)議為http,位置路徑是 192.168.1.1 的8000端口。位置路徑很好理解,就是IP加端口號(hào)。對(duì)于初學(xué)者往往忽略了其中包含的通訊協(xié)議,除了http之外,還可以指定為:

TCP地址
使用TCP協(xié)議進(jìn)行傳輸,其形式為:net.tcp://localhost:8000/

IPC地址
使用net.pipe進(jìn)行傳輸,其形式為:net.pipe://localhost/

MSMQ地址
使用Microsoft Message Queue 機(jī)制 進(jìn)行傳輸,其形式為:net.msmq://localhost/

對(duì)等網(wǎng)地址
使用net.p2p進(jìn)行傳輸,其形式為:net.p2p://localhost/

下面看看配置文件中的實(shí)際例子:
< host >
< baseAddresses >
< add baseAddress = "http://localhost:8731/" />
</ baseAddresses >
</ host >
< endpoint address ="http://localhost:8731/Service" binding ="basicHttpBinding" contract ="Wcf_Address_Config.IService1" >
</ endpoint >

也可以寫成相對(duì)路徑:

< host >
< baseAddresses >
< add baseAddress = "http://localhost:8731/" />
</ baseAddresses >
</ host >
< endpoint address ="Service1" binding ="basicHttpBinding" contract ="Wcf_Address_Config.IService1" ></ endpoint >

那么在編程中如何設(shè)置地址呢?

EndpointAddress address = new EndpointAddress( " http://127.0.0.1:2136/Service1 " );
Binding binding
= new BasicHttpBinding();
wcf.IService1 service
= new wcf.Service1Client(binding, address);

2、綁定( binding

綁定元素表示綁定的特定部分,如傳輸協(xié)議、編碼、基礎(chǔ)結(jié)構(gòu)級(jí)協(xié)議(如 WS-ReliableMessaging)的實(shí)現(xiàn)以及通信堆棧的其他任何要素。綁定也是組成服務(wù)終結(jié)點(diǎn)的三要素之一。WCF基庫(kù)中提供了很多可選擇的預(yù)綁定:

basicHttpBinding

一個(gè)綁定,適用于與符合 WS-Basic Profile 的 Web 服務(wù)(例如基于 ASP.NET Web 服務(wù) (ASMX) 的服務(wù))進(jìn)行的通信。 此綁定使用 HTTP 作為傳輸協(xié)議,并使用文本/XML 作為默認(rèn)的消息編碼。傳輸協(xié)議為:HTTP/HTTPS 編碼格式為:Text,MTOM

wsHttpBinding

一個(gè)安全且可互操作的綁定,適合于非雙工服務(wù)約定。傳輸協(xié)議為:HTTP/HTTPS 編碼格式為:Text,MTOM

wsDualHttpBinding

一個(gè)安全且可互操作的綁定,適用于雙工服務(wù)協(xié)定或通過(guò) SOAP 媒介進(jìn)行的通信。傳輸協(xié)議為:HTTP 編碼格式為:Text,MTOM

netTcpBinding

一個(gè)安全且經(jīng)過(guò)優(yōu)化的綁定,適用于 WCF 應(yīng)用程序之間跨計(jì)算機(jī)的通信。傳輸協(xié)議為:TCP 編碼格式為:Binary

netPeerTcpBinding

一個(gè)支持多計(jì)算機(jī)安全通信的綁定。傳輸協(xié)議為:P2P 編碼格式為:Binary

3、契約( contract

在WCF中一共包含四種契約,1)服務(wù)契約:服務(wù)契約將多個(gè)相干的操作聯(lián)系在一起,組成單個(gè)功能元素,契約可以定義服務(wù)級(jí)設(shè)置,如果服務(wù)的命名空間,對(duì)應(yīng)的回調(diào)契約及其其他此類設(shè)置。2)數(shù)據(jù)契約,服務(wù)使用的數(shù)據(jù)類型必須在元數(shù)據(jù)中進(jìn)行描述,以使其他各方可以與該服務(wù)進(jìn)行交互操作,數(shù)據(jù)類型的說(shuō)明稱謂數(shù)據(jù)契約,而這些類型可以在消息的任何部分使用,如果服務(wù)是用簡(jiǎn)單類型,沒(méi)有必要顯示使用數(shù)據(jù)契約。4)數(shù)據(jù)契約:可以將錯(cuò)誤契約與服務(wù)操作進(jìn)行關(guān)聯(lián),以指示可能返回到調(diào)用放的錯(cuò)誤,一個(gè)操作可能具有零各或多個(gè)與其相關(guān)聯(lián)的錯(cuò)誤,這些錯(cuò)誤是在編程模型中建模為異常的SOA錯(cuò)誤,5)消息契約:消息契約描述消息的格式,他會(huì)聲明消息元素應(yīng)包含在消息頭中還是包含在消息正文中,應(yīng)該對(duì)消息的任何元素應(yīng)用何種級(jí)別的安全。契約也是組成服務(wù)終結(jié)點(diǎn)的三要素之一。

4、終結(jié)點(diǎn)( endpoint

一個(gè)終結(jié)點(diǎn)有三個(gè)要素組成,終結(jié)點(diǎn)用來(lái)發(fā)送或接收消息的構(gòu)造,一個(gè)終結(jié)點(diǎn)就相當(dāng)于服務(wù)等公共接口,每個(gè)服務(wù)可以擁有一個(gè)或多個(gè)終結(jié)點(diǎn),由于每個(gè)服務(wù)都只擁有一個(gè)地址,所以某個(gè)服務(wù)擁有的所有終結(jié)點(diǎn)共享一個(gè)地址,終結(jié)點(diǎn)的配置或者編程,并不屬于業(yè)務(wù)邏輯的編程,所以WCF設(shè)計(jì)分離了終結(jié)點(diǎn)的定義和契約的具體實(shí)現(xiàn)。

5、元數(shù)據(jù)

服務(wù)的元數(shù)據(jù)描述服務(wù)的特性,外部實(shí)體需要了解這些特性以便于該服務(wù)進(jìn)行通信,服務(wù)所公開的元數(shù)據(jù)包括XML架構(gòu)文件和WSDL文檔,啟用元數(shù)據(jù)后,WCF通過(guò)檢查服務(wù)以及終結(jié)點(diǎn)自動(dòng)生成服務(wù)元數(shù)據(jù),若要發(fā)布服務(wù)元數(shù)據(jù),必須顯示啟動(dòng)元數(shù)據(jù)行為,在WCF中,可以為元數(shù)據(jù)設(shè)置一個(gè)專用的終結(jié)點(diǎn)。

其配置: < serviceMetadata httpGetEnabled ="True" httpGetUrl ="http://localhost:8731/Service" />

6、宿主

服務(wù)必須承載與某個(gè)進(jìn)程中,宿主的控制服務(wù)的生存期的應(yīng)用程序,服務(wù)可以是自寄宿,也可以由現(xiàn)有的寄宿進(jìn)程進(jìn)行管理,從內(nèi)部實(shí)現(xiàn)來(lái)看,一個(gè)服務(wù)宿主進(jìn)程,可以包含一個(gè)或多個(gè)應(yīng)用程序域,而每個(gè)應(yīng)用程序域理論上有可以被放入到任意個(gè)服務(wù)宿主,每個(gè)服務(wù)宿主可以擁由任意個(gè)上下文,每個(gè)上下文可以有0個(gè)或1和服務(wù)示例。

最后給出一個(gè)msdn中wcf的實(shí)例:注意引用 System.ServiceModel.dll

        
          using
        
         System;

        
          using
        
         System.ServiceModel;

        
          using
        
         System.ServiceModel.Description;


        
          namespace
        
         Microsoft.ServiceModel.Samples
{
    
        
          // Define a service contract.
        
        
    [ServiceContract(Namespace = 
        
          "http://Microsoft.ServiceModel.Samples"
        
        )]
    
        
          public
        
        
          interface
        
         ICalculator
    {
        [OperationContract]
        
        
          double
        
         Add(
        
          double
        
         n1, 
        
          double
        
         n2);
        [OperationContract]
        
        
          double
        
         Subtract(
        
          double
        
         n1, 
        
          double
        
         n2);
        [OperationContract]
        
        
          double
        
         Multiply(
        
          double
        
         n1, 
        
          double
        
         n2);
        [OperationContract]
        
        
          double
        
         Divide(
        
          double
        
         n1, 
        
          double
        
         n2);
    }

    
        
          // Service class that implements the service contract.
        
        
          // Added code to write output to the console window.
        
        
          public
        
        
          class
        
         CalculatorService : ICalculator
    {
        
        
          public
        
        
          double
        
         Add(
        
          double
        
         n1, 
        
          double
        
         n2)
        {
            
        
          double
        
         result = n1 + n2;
            Console.WriteLine(
        
          "Received Add({0},{1})"
        
        , n1, n2);
            Console.WriteLine(
        
          "Return: {0}"
        
        , result);
            
        
          return
        
         result;
        }

        
        
          public
        
        
          double
        
         Subtract(
        
          double
        
         n1, 
        
          double
        
         n2)
        {
            
        
          double
        
         result = n1 - n2;
            Console.WriteLine(
        
          "Received Subtract({0},{1})"
        
        , n1, n2);
            Console.WriteLine(
        
          "Return: {0}"
        
        , result);
            
        
          return
        
         result;
        }

        
        
          public
        
        
          double
        
         Multiply(
        
          double
        
         n1, 
        
          double
        
         n2)
        {
            
        
          double
        
         result = n1 * n2;
            Console.WriteLine(
        
          "Received Multiply({0},{1})"
        
        , n1, n2);
            Console.WriteLine(
        
          "Return: {0}"
        
        , result);
            
        
          return
        
         result;
        }

        
        
          public
        
        
          double
        
         Divide(
        
          double
        
         n1, 
        
          double
        
         n2)
        {
            
        
          double
        
         result = n1 / n2;
            Console.WriteLine(
        
          "Received Divide({0},{1})"
        
        , n1, n2);
            Console.WriteLine(
        
          "Return: {0}"
        
        , result);
            
        
          return
        
         result;
        }
    }
    
        
          class
        
         Program
    {
        
        
          static
        
        
          void
        
         Main(
        
          string
        
        [] args)
        {

            
        
          // Step 1 of the address configuration procedure: Create a URI to serve as the base address.
        
        
            Uri baseAddress = 
        
          new
        
         Uri(
        
          "http://localhost:8000/ServiceModelSamples/Service"
        
        );

            
        
          // Step 2 of the hosting procedure: Create ServiceHost
        
        
            ServiceHost selfHost = 
        
          new
        
         ServiceHost(
        
          typeof
        
        (CalculatorService), baseAddress);

            
        
          try
        
        
            {


                
        
          // Step 3 of the hosting procedure: Add a service endpoint.
        
        
                selfHost.AddServiceEndpoint(
                    
        
          typeof
        
        (ICalculator),
                    
        
          new
        
         WSHttpBinding(),
                    
        
          "CalculatorService"
        
        );


                
        
          // Step 4 of the hosting procedure: Enable metadata exchange.
        
        
                ServiceMetadataBehavior smb = 
        
          new
        
         ServiceMetadataBehavior();
                smb.HttpGetEnabled = 
        
          true
        
        ;
                selfHost.Description.Behaviors.Add(smb);

                
        
          // Step 5 of the hosting procedure: Start (and then stop) the service.
        
        
                selfHost.Open();
                Console.WriteLine(
        
          "The service is ready."
        
        );
                Console.WriteLine(
        
          "Press <ENTER> to terminate service."
        
        );
                Console.WriteLine();
                Console.ReadLine();

                
        
          // Close the ServiceHostBase to shutdown the service.
        
        
                selfHost.Close();
            }
            
        
          catch
        
         (CommunicationException ce)
            {
                Console.WriteLine(
        
          "An exception occurred: {0}"
        
        , ce.Message);
                selfHost.Abort();
            }

        }
    }
}

      

WCF不得不清楚的概念


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产成人性毛片aaww | 国产精品99一区二区三区 | 欧美日本在线播放 | 爱爱爱久久久久久久 | 91社区在线观看精品 | 国产成人永久免费视 | 精品久久一区二区三区 | 福利午夜国产网站在线不卡 | 在线一级视频 | 伊人亚洲 | 国产精品嘿咻嘿咻在线播放 | 成人网久久 | 亚洲国产成人久久精品影视 | 国产福利一区二区精品视频 | 一级播放 | 国产精品成人在线播放 | 久青草视频免费视频播放线路1 | 中国女人精69xxxxxx视频 | 日本在线视频毛片 | 久久久噜噜噜 | 亚洲视频福利 | 欧美日韩在线成人免费 | 久久婷五月综合 | 欧美成人综合 | 夜夜爽夜夜操 | 久久高清影院 | 97久草| 久久乱69小说 | 在线 | 一区二区三区 | 国产一级精品高清一级毛片 | 亚洲精品乱码久久久久久 | 欧美日韩一区二区高清免费视频 | 亚洲国产精品二区久久 | 女人18毛片a级18毛多水真多 | 久久精品视频免费看 | 四虎影院的网址 | 日本不卡视频在线观看 | 日本一区中文字幕 | 欧美午夜大片 | 色综合综合色综合色综合 | 天堂成人在线 |