WCF配置心得
根據(jù)蔣金楠老師的博文所說(shuō)的, WCF的終結(jié)點(diǎn)有三個(gè)要素組成,分別是地址(Address)、綁定(Binding)和契約(Contract),簡(jiǎn)記可寫(xiě)成Endpoint = ABC。
地址:地址決定了服務(wù)的位置,解決了服務(wù)尋址的問(wèn)題。
綁定:綁定實(shí)現(xiàn)了通信的所有細(xì)節(jié),包括網(wǎng)絡(luò)傳輸、消息編碼,以及其他為實(shí)現(xiàn)某種功能對(duì)消息進(jìn)行的相應(yīng)處理。綁定的類(lèi)型包括BasicHttpBinding、WsHttpBinding、NetTcpBinding等。
契約:契約是對(duì)服務(wù)操作的抽象,也是對(duì)消息交換模式以及消息結(jié)構(gòu)的定義。
以上這些內(nèi)容摘抄自蔣老師的博文。理解的這些對(duì)配置WCF很有幫助。
那下面就一步步來(lái)配置一個(gè)WCF。
首先是服務(wù)端,
一個(gè)WCF的核心是終結(jié)點(diǎn),那么先把終結(jié)點(diǎn)寫(xiě)列出來(lái),
<services>
<service name="BLL.Logic" behaviorConfiguration="te">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9091/logicService"/>
</baseAddresses>
</host>
<endpoint address="" binding="ws2007HttpBinding" contract="BLL.ILogic" bindingConfiguration="transportWS2007HttpBinding" />
</service>
</services>
從<endpoint>幾個(gè)屬性address(地址) binding(綁定),Contract(契約),這幾個(gè)屬性正是上面所說(shuō)的"ABC" 注意一下 binding里填的是BasicHttpBinding、WsHttpBinding、NetTcpBinding這些值,而確切使用哪一個(gè)binding呢,就需要在bindingConfiguration中設(shè)置,值是使用的<binding>的name值。contract項(xiàng)目中contract的契約接口的完全限定名,這里關(guān)于binding的配置接下來(lái)會(huì)介紹。address沒(méi)填值,這里在<host>中已經(jīng)給定了一個(gè)地址了。
介紹完<endpoint>,再看看<endpoint>外面的。<endpoint>包含在<services>的<service>下,這里的<serivces>是一個(gè)集合,里面可以包含多個(gè)服務(wù),每個(gè)服務(wù)都會(huì)有特定的命名(name),而name則是項(xiàng)目里頭實(shí)現(xiàn)契約(Contract)的服務(wù)(Service)的類(lèi)的完全限定名。這里對(duì)servicebehavior進(jìn)行了一些設(shè)置,具體的內(nèi)容在名為te的<servicebehavior>中。
既然上面有配置有涉及到binding和behavior,下面則分別對(duì)兩者進(jìn)行配置。
<bindings>
<ws2007HttpBinding>
<binding name="transportWS2007HttpBinding" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
<security mode="Message">
<transport clientCredentialType="None"/>
</security>
</binding>
</ws2007HttpBinding>
<basicHttpBinding>
<binding name="newBinding" maxBufferPoolSize="21474835647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
</basicHttpBinding>
</bindings>
bindings這部分和services一樣,也是一個(gè)集合,里面包含著各種類(lèi)型的binding,例如在<ws2007HttpBinding>里面的<binding>才是確切的某一個(gè)binding, <endpoint>使用時(shí),bindingConfiguration的名稱(chēng)要寫(xiě)對(duì)外,binding的類(lèi)型也不能錯(cuò)。<binding>里面的子節(jié)點(diǎn)和屬性就不再一一介紹了,若是要通過(guò)WCF傳輸比較大的數(shù)據(jù)時(shí),要在binding的屬性和<readerQuotas>設(shè)置一下。
<behaviors>
<serviceBehaviors>
<behavior name="te">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
最后到behaviors了。同理,behaviors也是一個(gè)集合,里面有兩種類(lèi)型,一種是serviceBehaviors,用于配置service的;另一種是endpointBehaviors,用于配置endpoint的。這兩種類(lèi)型都是一個(gè)集合,子節(jié)點(diǎn)<behavior>是它們的子項(xiàng),以name來(lái)區(qū)分各個(gè)behavior,至于里面有什么屬性和子項(xiàng)也不多說(shuō)了,使用時(shí)在相應(yīng)的service或endpoint的behaviorConfiguration屬性填上behavior的name值就行了。
服務(wù)端的配置就嘮叨到這里,下面到客戶(hù)端的。
<client>
<endpoint address="http://localhost:9091/logicService" binding="ws2007HttpBinding"
bindingConfiguration="WS2007HttpBinding_ILogic" contract="Proxy.ILogic"
name="WS2007HttpBinding_ILogic">
</endpoint>
</client>
首先也是是終結(jié)點(diǎn),客戶(hù)端的終結(jié)點(diǎn)放在client里,里面也是有"ABC",這里的address一定要與服務(wù)端配置的一樣,否則找不到相應(yīng)的服務(wù)的。binding的類(lèi)型也要與服務(wù)端的一樣,contract則是用svcutil或其他工具生成的代碼里的那個(gè)類(lèi)的完全限定名。
<ws2007HttpBinding>
<binding name="WS2007HttpBinding_ILogic" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="1024" maxArrayLength="2147483647"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
</binding>
</ws2007HttpBinding>
另一個(gè)還要提的是這個(gè)binding,客戶(hù)端的binding比服務(wù)端的要配置多一點(diǎn)東西closeTimeout,openTimeout,receiveTimeout 大致與服務(wù)端一樣。
另外若要傳輸比較的大數(shù)據(jù)時(shí),可以按我這樣來(lái)配,其實(shí)這個(gè)配置已經(jīng)適用于傳輸幾M的圖片。由于是個(gè)入門(mén)者,很多東西的理解還不夠透徹,以上有說(shuō)錯(cuò)的還請(qǐng)各位批評(píng)指出。謝謝!
- C#計(jì)算器編寫(xiě)代碼
- C#實(shí)現(xiàn)Winform版計(jì)算器
- C#日歷樣式的下拉式計(jì)算器實(shí)例講解
- c#入門(mén)之實(shí)現(xiàn)簡(jiǎn)易存款利息計(jì)算器示例
- C#編寫(xiě)的windows計(jì)算器的實(shí)例代碼
- C# 一個(gè)WCF簡(jiǎn)單實(shí)例
- WinForm窗體調(diào)用WCF服務(wù)窗體卡死問(wèn)題
- C# WCF簡(jiǎn)單入門(mén)圖文教程(VS2010版)
- 總結(jié)C#動(dòng)態(tài)調(diào)用WCF接口的兩種方法
- WCF實(shí)現(xiàn)的計(jì)算器功能實(shí)例
相關(guān)文章
人人都是開(kāi)發(fā)者:7款傻瓜式APP開(kāi)發(fā)工具
國(guó)外的營(yíng)銷(xiāo)工作者和技術(shù)開(kāi)發(fā)者開(kāi)發(fā)了許多能幫助企業(yè)創(chuàng)建簡(jiǎn)單APP應(yīng)用的工具,通過(guò)這些工具,就算是一個(gè)對(duì)程序一竅不通的普通網(wǎng)民都可以很容易的創(chuàng)建一個(gè)企業(yè)的APP程序,并可以對(duì)程序進(jìn)行應(yīng)用更新維護(hù),開(kāi)展?fàn)I銷(xiāo)等活動(dòng)2013-11-11詳解為什么現(xiàn)代系統(tǒng)需要一個(gè)新的編程模型
如今高要求的分布式系統(tǒng)的建造者遇到了不能完全由傳統(tǒng)的面向?qū)ο缶幊?OOP)模型解決的挑戰(zhàn),但這可以從Actor模型中獲益。2021-05-05Scala函數(shù)式編程專(zhuān)題--函數(shù)思想介紹
這篇文章主要介紹了Scala函數(shù)式編程的的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06分享幾個(gè)快速提升工作效率的小工具(Listary等)
這篇文章主要介紹了分享幾個(gè)快速提升工作效率的小工具(Listary等),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04作為程序員必須了解的縮寫(xiě)和專(zhuān)業(yè)名詞
這篇文章主要介紹了作為程序員必須了解的縮寫(xiě)和專(zhuān)業(yè)名詞,文中講解非常詳細(xì),對(duì)想學(xué)編程的朋友有所幫助,感興趣的可以了解下2020-07-07300行代碼讓外婆實(shí)現(xiàn)語(yǔ)音搜索購(gòu)物功能
這篇文章主要介紹了300行代碼讓外婆實(shí)現(xiàn)語(yǔ)音搜索購(gòu)物功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03詳解Python OpenCV數(shù)字識(shí)別案例
信用卡識(shí)別的案例用到了圖像處理的一些基本操作,對(duì)剛上手CV的人來(lái)說(shuō)還是比較友好的。2021-05-05H5混合開(kāi)發(fā)手機(jī)Web App入門(mén):概念篇
如果你開(kāi)始學(xué)習(xí)手機(jī) App 開(kāi)發(fā),就一定會(huì)聽(tīng)到 H5 這個(gè)詞。它是目前的主流開(kāi)發(fā)技術(shù)之一,容易上手,開(kāi)發(fā)周期短、成本低、兼容傳統(tǒng) Web 開(kāi)發(fā)。但是,很少有文章詳細(xì)介紹,H5 到底是什么技術(shù),有什么原理,跟其他技術(shù)的差異在哪里。2022-12-12