程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Learn WCF (4)--學會使用配置文件

Learn WCF (4)--學會使用配置文件

編輯:關於.NET

無論是Web應用程序還是Win應用程序,我們都會經常用到配置文件。WCF作為分布式開發的基礎框架,在定義服務以及定義消費服務的客戶端時,都使用了配置文件的方法。配置文件的重要性和實用性是大家所熟知的,它可以給我們WCF開發的靈活性上帶來很大的提高。下面說說我學習使用配置文件的所得。

WCF的配置使用.NET Framework的System.Configuration配置系統。在Visual Studio中配置一個WCF服務時,如果是自托管宿主或Windows Services宿主,則配置文件為App.confing,如果是IIS宿主,則配置文件為Web.config。

先來看看簡單的system.ServiceModel結構

<system.ServiceModel>

   <services>
      <service>
         <endpoint/>
      </service>
   </services>

   <bindings>
   <!—定義一個或多個系統提供的binding元素,例如<basicHttpBinding> -->
   <!—也可以是自定義的binding元素,如<customBinding>. -->
      <binding>
      <!—例如<BasicHttpBinding>元素. -->
      </binding>
   </bindings>

   <behaviors>
   <!—一個或多個系統提供的behavior元素. -->
      <behavior>
      <!—例如<throttling>元素. -->
      </behavior>
   </behaviors>

</system.ServiceModel>

(1)<services>

服務是在配置文件的 services 節中定義的。每個服務都有自己的 service 配置節。在Service中定義特定服務的address,binding,contract(也就是傳說中重要的ABC)。

        <services>
            <service name="WCFStudent.WCFStudentText" behaviorConfiguration="ServiceBehavior">
                <endpoint address="" binding="wsHttpBinding" contract="WCFStudent.IStuServiceContract"></endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            </service>
        </services>

<!--一個Service中可以有多個endpoint,這樣就可以同時定制多個服務。如果address值為空,那麼endpoint的地址就是默認的基地址(Base Address)。那麼則需要在host中聲明Base Address-->

(2)<bindings>

此節包含標准綁定和自定義綁定的集合。每一項都是一個可由其唯一 name 進行標識的 binding 元素。服務通過用 name 與綁定進行鏈接來使用綁定。

個人感覺比較常用的是<basicHttpBinding>,<basicHttpBinding>等。由於屬性比較多,在這裡就不一一說明了。

<bindings>
      <basicHttpBinding>
        <binding name="IStuServiceContract" 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="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
      </basicHttpBinding>
    </bindings>
<!--相應屬性的設置大家可以參看MSDN.
http://msdn.microsoft.com/zh-cn/library/ms731361.aspx-->

(3)<behaviors>

此元素定義名為 endpointBehaviors 和 serviceBehaviors 的兩個子集合。每個集合分別定義終結點和服務所使用的行為元素。每個行為元素由其唯一的 name 屬性標識。如果需要指定服務在執行方面的相關特性時,就必須定義服務的behavior。在WCF中,定義behavior就可以設置服務的運行時屬性,甚至於通過自定義behavior插入一些自定義類型。

<behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <!-- 為避免洩漏元數據信息,請在部署前將以下值設置為 false 並刪除上面的元數據終結點  -->
                    <serviceMetadata httpGetEnabled="true"/>
                    <!-- 要接收故障異常詳細信息以進行調試,請將以下值設置為 true。在部署前設置為 false 以避免洩漏異常信息-->
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
(4)<client>

有的時候我們還需要定義<client>節點,主要定義客戶端可以連接的終結點的列表。

<client>
            <endpoint address="http://localhost:39113/WCFServiceText/WCFStudentText.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IStuServiceContract"
                contract="ServiceReference1.IStuServiceContract" name="WSHttpBinding_IStuServiceContract">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>

<!--如果宿主是IIS,WIN應用程序調用WCF時,會自動在App.config中生成<client>節的設置-->

三種宿主形式的配置文件的聲明基本上一樣。如果使用svcutil.exe生成客戶程序,會在svcutil.exe的根目錄中生成一個配置文件,值得大家一看:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IStuServiceContract" 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="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <security mode="Message">
                        <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" establishSecurityContext="true" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:39113/WCFServiceText/WCFStudentText.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IStuServiceContract"
                contract="IStuServiceContract" name="WSHttpBinding_IStuServiceContract">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved