wcf系列---- binding的使用(1)
文轉自http://www.cnblogs.com/huangxincheng/archive/2011/10/23/2221845.html
作為WCF速成系列,只介紹些項目開發中常用到的實戰知識。
?
學習wcf,還是對其中的幾個術語要了解一下。wcf中有一個ABC的概念,就是
?????????? 第一: "A" 是地址,就是告訴別人我wcf在何處。
第二: "B"是綁定,就是告訴別人應該走什么路才能過來。
第三: "C"是契約:就是告訴別人我wcf這里有哪些東西。
?
項目開發中常用到的三種綁定:
????????? 第一:wsHttpBinding,? 這個binding可以認為是webservice的加強版WSE,設計的目的就是用于異構系統的交互(比如java)。
????????? 第二:netTcpBinding,?? 這個binding可以認為是remoting的加強版,設計的目的就是用于不同機器的.net 程序交互,
????????? 第三: netMsmqBinding,? 這個binding可以認為是msmq的加強版本,設計目的就是脫機環境下不同機器的.net程序交互,確保信息不丟失。
?????
下面對前二種binding的實際代碼運用。
?
第二步: 既然”C"已經出來了,那么她必須要有承載她的環境,也就是所謂的“宿主”。這里用console來承載。
???????????????? 新建console程序。
??第三步:現在服務處于預開啟狀態,為了讓wcf更加靈活,更加容易控制,就要將相關配置寫入到config里面。
????????????? 在console類庫中新建一個config文件,最后運行console程序正式啟動。代碼圖如下:
<!--定義客戶端元數據類型--><behaviors>
<serviceBehaviors>
<!--配置名稱-->
<behavior name="wsHttpBindingExample.MyserviceBehavior">
<!--客戶端是否支持HttpGet方式獲取數據-->
<serviceMetadata httpGetEnabled="true" />
<!--客戶端是否能捕獲異常-->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<!--數據配置-->
<!--name就是服務名稱,behaviorConfiguration:服務要暴露元數據 -->
<service
behaviorConfiguration="wsHttpBindingExample.MyserviceBehavior"
name="wsHttpBindingExample.Myservice">
<!--address:就是告訴wcf的地址是基地址baseAddresses,這個地方可以定義相對地址和決定地址-->
<!--binding:該wcf走的協議是http協議wse-->
<!--contract:就是契約內容-->
<endpoint
address=""
binding="wsHttpBinding"
contract="wsHttpBindingExample.IMyservice">
<!--定義服務器類型-->
<!--<identity>
<dns value="localhost" />
</identity>-->
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<!--二個用途:第一:這個地址用于給客戶端作為服務引用的地址-->
<!--二個用途;第二,做為endpoint的基地址存在-->
<add baseAddress="http://localhost:8732/Design_Time_Addresses/wsHttpBindingExample/Myservice/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
最后:? wcf已經開啟,正在監視著address,然后我們就是先建一個console的Client程序,“引用”中“點擊右鍵”添加服務引用。
客戶端應用代碼:
???? 如果大家看懂了wsHttpBinding如何使用,那么改成netTcpBinding將會是輕而易舉。 因為只要修改兩個地方即可。
?
?????????? 第一:修改配置文件中的endpoint地址。
?????? 為了配置大文件傳輸我們需要重新定義bindings
<?xml version="1.0" encoding="utf-8" ?><configuration>
<system.serviceModel>
<!--定義客戶端元數據類型-->
<behaviors>
<serviceBehaviors>
<!--配置名稱-->
<behavior name="wsHttpBindingExample.MyserviceBehavior">
<!--客戶端是否支持HttpGet方式獲取數據-->
<serviceMetadata httpGetEnabled="false" />
<!--客戶端是否能捕獲異常-->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<!--數據配置-->
<service
behaviorConfiguration="wsHttpBindingExample.MyserviceBehavior"
name="netTcpBindingExample.ManFly">
<!--address:這個地址是絕對地址用的協議netTcp協議傳輸-->
<!--binding:該wcf走的協議是netTcpBinding協議-->
<!--contract:就是契約內容-->
<endpoint
address=""
binding="netTcpBinding"
contract="netTcpBindingExample.IFly"
bindingConfiguration="netTcpBindConfig"
/>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<!--二個用途:第一:這個地址用于給客戶端作為服務引用的地址-->
<!--二個用途;第二,做為endpoint的基地址存在-->
<add baseAddress="net.tcp://localhost:8735/Design_Time_Addresses/netTcpBindingExample/ManFly/" />
</baseAddresses>
</host>
</service>
</services>
<!--定義netTcpBinding協議為主-->
<!--如果想傳輸大文件,下面幾個配置也是必不可少的:
maxBufferPoolSize="2147483647 "
maxBufferSize="2147483647 "
maxReceivedMessageSize="2147483647 "
1、closeTimeout指定完成關閉操作提供的時間間隔、默認值為一分鐘
2、hostnameComparisonMode指定用于分析的Http主機名比較模式 默認值為StrongWildcard
3、listenBacklog指定偵聽器傷等待接受的最大通道數
4、connectionTimeout 屬性限制客戶端在引發連接異常之前將等待連接的時間。默認值為 10
5、maxBufferPoolSize一個整數,指定此綁定的最大緩沖池大小,默認是512*1024字節
6、maxBufferSize正整數,指定內存中用于存儲消息的存儲區的最大大小(字節)
如果 transferMode 屬性等于 Buffered,則此屬性應等于 maxReceivedMessageSize 屬性值。
如果 transferMode 屬性等于 Streamed,則此屬性不能大于 maxReceivedMessageSize 屬性值,應當至少為標頭的大小。
默認值為 65536。
7、maxConnections整數指定服務將創建/接受的最大出站和入站連接數。傳入和傳出連接分別根據此屬性指定的限制進行計數。默認值為10
8、maxReceivedMessageSize正整數,指定采用此綁定配置的通道上可以接受的最大信息大小,包括信息頭,如果消息超出此限制則發送方將收到 SOAP 錯誤。接收方將刪除該消息,并在跟蹤日志中創建事件項。默認值為 65536。
9、name一個包含綁定的配置名稱的字符串。因為此值用作綁定的標識,所以它應該是唯一的。.net4.0;里面就沒自動配置了
10、openTimeout指定完成打開操作提供的時間間隔
11、portSharingEnabled一個布爾值,指定是否為此連接啟用 TCP 端口共享。如果此值為 false,則每個綁定都使用自己的獨占端口。此設置只與服務相關,因為客戶端不受影響。
12、receiveTimeout一個 TimeSpan 值,指定為完成接收操作提供的時間間隔。此值應大于或等于 Zero。默認值為 00:10:00。
13、sendTimeout一個 TimeSpan 值,指定為完成發送操作提供的時間間隔。此值應大于或等于 Zero。默認值為 00:01:00。
14、transactionFlow一個布爾值,指定綁定是否支持流動 WS-Transactions。默認值為 false。
15、transactionProtocol指定與此綁定一起使用的事務處理協議。有效值為OleTransactions WSAtomicTransactionOctober2004 默認值為 OleTransactions。此屬性的類型為 TransactionProtocol。
16、transferMode一個 TransferMode 值,指定為請求或響應對消息進行緩沖處理還是流式處理。
-->
<bindings>
<netTcpBinding>
<binding
name="netTcpBindConfig"
closeTimeout="00:01:00"
openTimeout="00:1:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
transactionFlow="false"
transferMode="Buffered"
listenBacklog="10"
maxBufferPoolSize="2147583647"
maxBufferSize="2147483647"
maxConnections="10"
maxReceivedMessageSize="2147483647"
>
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647 "
maxArrayLength="2147483647 "
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true"
inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport
clientCredentialType="Windows"
protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
至此我已經安裝此博友的第一篇文章進行了匯總
轉載于:https://www.cnblogs.com/zhijianliutang/archive/2011/11/14/2248090.html
總結
以上是生活随笔為你收集整理的wcf系列---- binding的使用(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 常用接口的实现--compar
- 下一篇: 逻辑查询处理的步骤