首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Learn WCF (4) 精通配置檔:system.serviceModel 完整結構與三種宿主模式設定實戰

     編輯:關於.NET

WCF 服務與客戶端皆大量依賴配置檔 (Web.config/App.config) 定義端點、繫結、行為。掌握 <system.serviceModel> 結構是 WCF 開發靈活性的關鍵。本文解析核心區段與三種宿主模式差異。

system.serviceModel 核心結構速覽

<system.serviceModel>
  <services>          <!-- 服務定義 -->
    <service>
      <endpoint/>
    </service>
  </services>
  <bindings>          <!-- 繫結集合 -->
    <basicHttpBinding> ... </basicHttpBinding>
    <customBinding> ... </customBinding>
  </bindings>
  <behaviors>         <!-- 行為集合 -->
    <serviceBehaviors> ... </serviceBehaviors>
    <endpointBehaviors> ... </endpointBehaviors>
  </behaviors>
  <client>            <!-- 客戶端端點 -->
  </client>
</system.serviceModel>

四大核心區段深度解析

(1) <services>:服務與端點定義 (ABC)

<services>
  <service name="WCFStudent.WCFStudentText" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="WCFStudent.IStuServiceContract" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>
  • name:服務實作類別完整名稱
  • behaviorConfiguration:參考 <serviceBehaviors> 中的行為名稱
  • endpoint:定義 Address (相對/絕對)、Binding、Contract
  • address="":使用基底位址 (需在 Host 宣告 baseAddresses)
  • 可定義多端點,同一服務暴露不同繫結/合約

(2) <bindings>:繫結設定集合

<bindings>
  <basicHttpBinding>
    <binding name="IStuServiceContract" 
      closeTimeout="00:01:00" openTimeout="00:01:00" 
      receiveTimeout="00:10:00" sendTimeout="00:01:00"
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" ... />
  </basicHttpBinding>
</bindings>
  • 常用:basicHttpBinding (相容 ASMX)、wsHttpBinding (WS-* 標準)、netTcpBinding (高效能內網)
  • 每個 binding 元素以 name 識別,端點以 bindingConfiguration 參考
  • 屬性詳見 MSDN:timeout、encoding、security、readerQuotas、reliableSession 等

(3) <behaviors>:執行期行為控制

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />          <!-- 發布中繼資料 -->
      <serviceDebug includeExceptionDetailInFaults="false" /> <!-- 例外詳細資訊 -->
    </behavior>
  </serviceBehaviors>
</behaviors>
  • serviceBehaviors:服務層級 (中繼資料、除錯、授權、節流、交易等)
  • endpointBehaviors:端點層級 (序列化、驗證、路由等)
  • 自訂行為可擴充插入自訂邏輯

(4) <client>:客戶端端點清單

<client>
  <endpoint address="https://localhost:39113/WCFServiceText/WCFStudentText.svc"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IStuServiceContract"
    contract="ServiceReference1.IStuServiceContract" name="WSHttpBinding_IStuServiceContract">
    <identity><dns value="localhost" /></identity>
  </endpoint>
</client>
  • IIS 宿主時,VS「加入服務參考」自動產生
  • 自訂宿主需手工維護

三種宿主模式配置檔差異

宿主類型配置檔名稱備註
IIS / WASWeb.config.svc 檔案指定 Service
Windows ServiceApp.config需在程式碼/配置宣告 baseAddresses
Self-Host (Console/WPF/WinForm)App.config同 Windows Service

結構大同小異,核心差異在基底位址宣告與啟動方式。

svcutil.exe 產生的標準客戶端配置範例

<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IStuServiceContract" ...>
          <security mode="Message">
            <transport clientCredentialType="Windows" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client> ... </client>
  </system.serviceModel>
</configuration>

建議參考此標準輸出調整自訂配置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved