久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

WCF服務(wù)編程

 goodwangLib 2014-02-26

WCF方面的HelloWorld例子網(wǎng)上已經(jīng)很多了,。再寫這個顯得有些“Out”了,,不過只是作為筆記寫一下,。本篇使用的場景是從網(wǎng)上看到的:WCF服務(wù)端創(chuàng)建一個服務(wù)并公開地址,。WCF客戶端訪問該地址并發(fā)送字符串?dāng)?shù)據(jù),。服務(wù)端收到數(shù)據(jù)之后組合一個新的字符串?dāng)?shù)據(jù)并返回給客戶端顯示,。

下圖是運行時的效果,源碼在此下載,。

image

 

 

項目結(jié)構(gòu)及開發(fā)步驟

image

本示例中所有的項目都是采用類庫的方式創(chuàng)建的,,在開發(fā)過程中需要手工去添加System.ServiceModel組件和命名空間。Visual Studio 2005/2008有專門創(chuàng)建WCF的模板,,如果為了省事的話也可以直接使用該模板,。以下是簡單的在開發(fā)步驟及說明。

 

第一步 創(chuàng)建服務(wù)協(xié)定(Interface)

Cbcye.Contract 用于創(chuàng)建服務(wù)的協(xié)定(契約),,該協(xié)定中描述了服務(wù)提供的方法集,,本示例只創(chuàng)建了一個GetString的方法。該協(xié)定需要在服務(wù)端和客戶端都實現(xiàn),。

最開始學(xué)的時候?qū)@個服務(wù)端和客戶端都需要實現(xiàn)服務(wù)協(xié)定不是很理解,,以為如果通過DLL引用的方式來實現(xiàn)服務(wù)協(xié)定共享的話那么是不是會限制WCF的應(yīng)用范圍,,現(xiàn)在了解到其實服務(wù)的協(xié)定是可以通過WSDL來描述的,,那就是說像Web Service一樣,,其他非WCF的應(yīng)用程序也可以使用。 

復(fù)制代碼
//[1]創(chuàng)建服務(wù)協(xié)定
namespace Cbcye.Contract
{
    [ServiceContract]
    
public interface IHelloWorld
    
{
        [OperationContract]
        
string Getstring(string InStr);
    }

}
 

復(fù)制代碼

 

第二步 根據(jù)服務(wù)協(xié)定實現(xiàn)服務(wù)(具體是做什么的)

Cbcye.Service 用于創(chuàng)建服務(wù),,就是根據(jù)服務(wù)協(xié)定實現(xiàn)服務(wù)的具體方法,,比如本示例中的使用 

復(fù)制代碼
//[2] 實現(xiàn)協(xié)定
namespace Cbcye.Service
{
    
public class HelloWorldService:IHelloWorld
    
{
        
#region IHelloWorld Members 

        
public string Getstring(string InStr)
        
{
            
return "You Input String is:" + InStr;
        }
 

        
#endregion

    }

}
 
復(fù)制代碼

 

第三步 創(chuàng)建承載服務(wù)的應(yīng)用程序(服務(wù)在哪運行)

Cbcye.ServiceConsoleHost 用于承載服務(wù),就是該服務(wù)是由哪個應(yīng)用程序來運行的,。本示例中采用Windows控制臺應(yīng)用程序來承載服務(wù)


//[3] 將服務(wù)托管在控制臺應(yīng)用程序
namespace Cbcye.ServiceConsoleHost
{
    
class Program
    {
        
static void Main(string[] args)
        {
            StartListener();
        } 

        
public static void StartListener()
        {
            
//WCF配置信息在App.Config中
            using (ServiceHost host = new ServiceHost(typeof(HelloWorldService)))
            {
                
//注冊啟動時事件
                host.Opened += delegate
                {
                    Console.WriteLine(
"[Server] Begins to listen request on " + host.BaseAddresses[0].ToString());
                };
                host.Open();
                Console.Read();
            }
        }
    }


 

服務(wù)的配置信息存放到App.Config里  

復(fù)制代碼
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<!-- WCF 配置聲明-->
  
<system.serviceModel>
    
<services>
      
<!-- 服務(wù)名稱跟Cbcye.Service項目中的一致,使用命名空間.類名 -->
      
<service name="Cbcye.Service.HelloWorldService">
        
<!--
        address - 指定這個Endpoint對外的URI,這個URI可以是個絕對地址,,也可以是個相對于baseAddress的
                  相對地址。如果此屬性為空,,則這個Endpoint的地址就是baseAddress
        binding - 指定這個Endpoint使用的binding,,這個banding可以是系統(tǒng)預(yù)定義的9個binding之一,
                  比如是basicHttpBinding,,也可以是自定義的customBinding。binding決定了通訊的類型,、
                  安全,、如何編碼、是否基于session,、是否基于事務(wù)等等,。
        contract- 指定這個Endpoint對應(yīng)的Contract的全限定名(名稱空間.類型名),這個Contract應(yīng)該是被
                  service元素的name指定的那個service實現(xiàn),。
          name  - Endpoint的名稱,,可選屬性,每個Contract都可以有多個Endpoint,,但是每個Contract對應(yīng)的
                  多個Endpoint名必須是唯一的
        
-->
        
<endpoint address="" binding="basicHttpBinding" contract="Cbcye.Contract.IHelloWorld" name=""></endpoint>
        
<host>
          
<baseAddresses>
            
<!-- 在此可以定義每種傳輸協(xié)議的baseAddress,,用于跟使用同樣傳輸協(xié)議Endpoint定義的相對地
                 址組成完整的地址,但是每種傳輸協(xié)議只能定義一個baseAddress,。HTTP的baseAddress同時是service
                 對外發(fā)布元數(shù)據(jù)的URL
-->
            
<add baseAddress="http://localhost:7788/cbcye/helloworld%22/>
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration> 

復(fù)制代碼

 

第四步 創(chuàng)建客戶端調(diào)用服務(wù)

Cbcye.Client 用于消費WCF服務(wù)端提供出來的服務(wù),,由于客戶端也需要實現(xiàn)服務(wù)協(xié)定(第一步創(chuàng)建的)因此需要在服務(wù)端創(chuàng)建代理類用于實現(xiàn)協(xié)定。

客戶端代理類代碼 

復(fù)制代碼
//[4] 實現(xiàn)客戶端代理類
namespace Cbcye.Client
{
    
//ClientBase提供基實現(xiàn),,用于創(chuàng)建可調(diào)用服務(wù)的WCF客戶端對象
    
//擴(kuò)展 ClientBase<(Of <(TChannel>)>) 類可以創(chuàng)建可用于連接服務(wù)的自定義 WCF 客戶端對象
    class ClientProxy:ClientBase<IHelloWorld>,IHelloWorld
    
{
        
public ClientProxy()
            : 
base()
        
{
        }
 

        
#region IHelloWorld Members 

        
public string Getstring(string InStr)
        
{
            
//信道工廠,創(chuàng)建用于消息發(fā)送的信道,。
            return this.Channel.Getstring(InStr);
        }
 

        
#endregion

    }

}
 

復(fù)制代碼

 

客戶端調(diào)用程序代碼 

復(fù)制代碼
//[5]調(diào)用服務(wù)端服務(wù)的方法
namespace Cbcye.Client
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
using (ClientProxy proxy = new ClientProxy())
            
{
                
//請求Hello World字符串給服務(wù)器端
                Console.WriteLine("[Client] " + proxy.Getstring("Hello World"));
            }

            Console.Read();
        }

    }

}
 

復(fù)制代碼

 

客戶端應(yīng)用程序配置 

復(fù)制代碼
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<system.serviceModel>
    
<client>
      
<!--參照Host項目的配置文件注釋-->
      
<endpoint address="http://localhost:7788/cbcye/helloworld%22 binding="basicHttpBinding" contract="Cbcye.Contract.IHelloWorld"></endpoint>
    
</client>
  
</system.serviceModel>
</configuration> 
復(fù)制代碼

 

總結(jié)

Ok,第一個WCF應(yīng)用程序已經(jīng)實現(xiàn)完了,本程序為了簡便開發(fā)過程,,將WCF的配置信息都放到了App.Config來配置,。也體現(xiàn)了WCF框架的高效和靈活性。WCF基本概念請參見《WCF服務(wù)編程-基礎(chǔ)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多