WCF中配置文件解析


      在WCF Service Configuration Editor的使用中,我們通過配置工具自動生成了WCF服務端的config文件。現在我們來看下這個配置文件各個標簽的意義(解釋在下面xml文件中的注釋里)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
     <system.ServiceModel><!-- 這個程序集我們在項目中有引用的 -->
         <!-- services 元素包含應用中駐留的所有service的 配置要求 -->
         <services>
              <!-- 每個服務的配置屬性說明: name - 指 定這個service配置是針對的那個服務,為 一個實現了某些Contract的服務類的完全 限定名(名稱空間.類型名),ServiceHost載入一個服務后,會 到配置文件中的 下找有 沒有name屬性跟服務匹配的 的配置 behaviorConfiguration - 指定在下的一個的name,這個特定給這個service制定了一些行為, 比 如服務是否允許身份模擬-->
              <service name="名稱空間.類型名" behaviorConfiguration="behavior名">
                   <host>
                       <baseAddresses>
                            <!-- 在此可以定義每種傳輸協議的baseAddress, 用於跟使用同樣傳輸協議Endpoint定義的相對地 址組成完整的地址,但是每種傳輸協議只能定義一個baseAddress。HTTP的baseAddress同時是service 對外發布服務說明頁面的URL-->
                            <add baseAddress="http://address" />
                       </baseAddresses>
                       <timeouts></timeouts>
                   </host>
                   <!-- 每個服務可以有多個Endpoint, 下面 元素對每個Endpoint分別進行 配置 屬性說明: address - 指 定這個Endpoint對外的URI,這個URI可以是個絕對地址,也可以是個相對於baseAddress的 相對地址。如果此屬性為空,則這 個Endpoint的地址就是baseAddress binding - 指定這個Endpoint使用的binding,這個banding可以是系統預定義的9個binding之一, 比如是basicHttpBinding,也可以是自定義的customBinding。binding決定了通訊 的類型、 安全、如何編碼、是否基於session、是否基於事務等等 contract - 指定這個Endpoint對應的Contract的全限定名(名稱空間.類型名),這個Contract應 該被 service元素的name指定的那個service實現 bindingConfiguration - 指 定一個binding的配置名稱,跟下面同 類的name匹配 behaviorConfiguration - 指 定這個endpoint的behavior, 指向 下的同樣配置名稱的 name - Endpoint的名稱,可選屬性,每個Contract都可以有多個Endpoint,但是每個Contract對應的 多個Endpoint名必須是唯一的-->
                   <endpoint address="URI" binding="basicHttpBinding" contract="Contract全限定名" bindingConfiguration="binding名" behaviorConfiguration="String" name="">
                       <!-- 用戶定義的xml元素集合, 一般用作SOAP的header內容-->
               <!-- 這個可以不填,但當多個endpoint都用的是一個地址時,header就顯得非常重要了-->
<headers> <!-- 任何xml內容 --> </headers> </endpoint> </service> </services> <bindings> <!-- 指定一個或多個系統預定義的binding, 比如,當然也可以指定自定義的customBinding, 然后在某個指定的binding下建立一個或多個配置,以便被Endpoint來 使用這些配置 --> <!-- 這里舉兩個Binding的方式,一個是http的,一個是tcp的,BindingElement的順序非常重要。
BindingElement集合通常會創建一個用於通信的堆棧,起順序語BindingElement集 合中元素順序一致。
因此BindingElement集合中的binding element順序直接影響了通信堆棧處理消息的順序。不過這些WCF都為你排好序了,不必擔心。
-->

        <basicHttpBinding> <!-- 某一類的binding的下面可能有多個配置,binding元素的name屬 性標識某個binding--> <binding name="binding名"> </binding> </basicHttpBinding>
         <netTcpBinding> </netTcpBinding> 
</bindings> <!-- 定義service和Endpiont行為--> <behaviors> <!-- 定義service的行為--> <serviceBehaviors> <!-- 一個或多個系統提供的或定制的behavior元 素 屬性說明: name - 一個behavior唯一標識,元素下的behaviorConfiguration屬 性指向這個name--> <behavior name="此Behavior名稱"> <!-- 指定service元數據發 布和相關信息 屬性說明: httpGetEnabled - bool類型的值,表示是否允許通過HTTP的get方 法獲取sevice的WSDL元數據 httpGetUrl - 如 果httpGetEnabled為true, 這個屬性指示使用哪個URL地址發布服務的WSDL, 如果這個屬性沒有設置,則使用服務的HTTP類型的baseAddress后面加上?WSDL--> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://URI:port/address" /> <!--指定驗證服務端的憑據--> <serviceCredentials> <!--指定服務端的證書 屬性說明: storeName - 證 書的存儲區,可能值為:AddressBook,AuthRoot,CertificateAuthority Disallowed,My,Root,TrustedPeople,TrustedPublisher storeLocation - 證書存儲位置,可能值為:CurrentUser,LocalMachine x509FindType - 查找證書的方式,可能的值:FindBySubjectName,FindByThumbPrint,FindByIssuerName...... findValue - 對應查找方式的要查找證書的值 --> <serviceCertificate storeName="存儲區" storeLocation="存儲位置" x509FindType="FindBySubjectName" findValue="server1" /> </serviceCredentials> </behavior> </serviceBehaviors> <!-- 定義Endpiont的行為--> <endpointBehaviors> <!-- 一個或多個系統提供的或定制的behavior元 素 屬性說明: name - 一個behavior唯一標識,元素下的behaviorConfiguration屬 性指向這個name--> <behavior name="此Behavior名稱"> <!--指定客戶端的憑據--> <clientCredentials> <!--指定客戶端的證書 屬性說明: storeName - 證 書的存儲區,可能值為:AddressBook,AuthRoot,CertificateAuthority Disallowed,My,Root,TrustedPeople,TrustedPublisher storeLocation - 證書存儲位置,可能值為:CurrentUser,LocalMachine x509FindType - 查找證書的方式,可能的值:FindBySubjectName,FindByThumbPrint,FindByIssuerName...... findValue - 對應查找方式的要查找證書的值 --> <clientCertificate storeName="存儲區" storeLocation="存儲位置" x509FindType="FindBySubjectName" findValue="Client1" /> <serviceCertificate> <authentication certificateValidationMode="None" /> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <!-- 包含客戶端跟服務端連接使用到的Endpoint的 配置 --> <client> <!-- 每個客戶端Endpoint設置 服務端的配置沒有這個標簽 屬性說明: address - 對 應到服務端這個Endpoint的address binding - 指定這個Endpoint使用的binding,這個banding可以是系統預定義的9個binding之一, 比如是basicHttpBinding contract - 指 定這個Endpoint對應的Contract的 全限定名(名稱空間.類型名) name - Endpoint的配置名,客戶端代理類的構造方法中的endpointConfigurationName對 應到這個name bindingConfiguration - 指 定客戶端binding的具體設置,指向元 素下同類型binding的name behaviorConfiguration - 指定這個endpoint的behavior,指向 下的同樣配置名稱的 --> <endpoint address="URI" binding="basicHttpBinding" bindingConfiguration="binding名" behaviorConfiguration="String" contract="Contract全限定名" name="endpoint配置名" > <!-- 用於客戶端驗證服務端身份,可選以下一種方式驗證服務端--> <identity> <userPrincipalName></userPrincipalName> <servicePrincipalName></servicePrincipalName> <!--如果客戶端驗證是windows,這里指定DNS名;如果是Certificate, 這里指定證書subject name--> <dns></dns> <rsa></rsa> <!--指定服務端證書的公鑰 屬性說明: encodedValue - 服務端證書的公鑰的base64編碼,用於加密用戶名和 密碼--> <certificate encodedValue=""></certificate> <!-- 用戶指定在客戶端證書存儲區內的服務端證書 屬性說明: storeName - 證 書的存儲區,可能值為:AddressBook,AuthRoot,CertificateAuthority Disallowed,My,Root,TrustedPeople,TrustedPublisher storeLocation - 證書存儲位置,可能值為:CurrentUser,LocalMachine x509FindType - 查找證書的方式,可能的值:FindBySubjectName,FindByThumbPrint,FindByIssuerName...... findValue - 對應查找方式的要查找證書的值 --> <certificateReference storeName="存儲區" storeLocation="存儲位置" x509FindType="FindBySubjectName" findValue="Client1" /> </identity> </endpoint> </client> </system.ServiceModel> </configuration>

   OK,WCF中的配置常用的基本就是這些了。並不是每個標簽都是必須的,像在HelloWorld程序里,就只有一個service、一個Endpoint、一個behavior。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM