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

WCF 技術深度剖析(三):基於 WAS 的非 HTTP 協定 IIS 寄宿實戰 (TCP 範例)

     編輯:關於.NET

前言:WAS 讓 IIS 脫離 HTTP 束縛

IIS 7 引入 WAS (Windows Process Activation Service),配合 WCF 提供的 TCP/Named Pipe/MSMQ Listener + Adapter,IIS 可像寄宿 HTTP 服務一樣寄宿非 HTTP 協定的 WCF 服務。本文以 NetTcpBinding 為例,完整演示從站點綁定、應用啟用協定到客戶端調用的全流程。

一、架構圖解

  • HTTP.SYS + W3SVC → HTTP 請求
  • NetTcpActivator (TCP Listener + Adapter) → TCP 請求 → WAS → 啟動工作進程
  • 同理 NetPipeActivator、NetMsmqActivator。

二、實戰步驟

1. 定義契約與服務 (Class Library)

[ServiceContract(Namespace="https://www.artech.com/")]
public interface ICalculator { [OperationContract] double Add(double x, double y); }

public class CalculatorService : ICalculator
{
    public double Add(double x, double y) => x + y;
}

2. 建立 .svc 檔案

<%@ ServiceHost Service="Artech.WasHostingDemo.Services.CalculatorService, Artech.WasHostingDemo.Services" %>

3. Web.config 設定 netTcpBinding

<system.serviceModel>
  <services>
    <service name="Artech.WasHostingDemo.Services.CalculatorService">
      <endpoint address="" binding="netTcpBinding" contract="Artech.WasHostingDemo.Contracts.ICalculator" />
    </service>
  </services>
</system.serviceModel>

注意:專案輸出目錄設為 Bin,供 ASP.NET 動態編譯載入。

4. IIS 站點層級:新增 net.tcp 站點繫結

appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']

或 IIS 管理器 → 「繫結」 → 新增:類型 net.tcp、連接埠 808。

5. 應用層級:啟用 net.tcp 協定

appcmd.exe set app "Default Web Site/WasHostingDemo" /enabledProtocols:http,net.tcp

關鍵:預設應用僅啟用 http,必須額外加入 net.tcp。

6. 客戶端調用

<endpoint address="net.tcp://127.0.0.1/WasHostingDemo/CalculatorService.svc"
          binding="netTcpBinding" contract="ICalculator" name="calculatorservice" />

// 代碼
using (var factory = new ChannelFactory<ICalculator>("calculatorservice"))
{
    var proxy = factory.CreateChannel();
    Console.WriteLine($"1+2={proxy.Add(1,2)}");
    (proxy as ICommunicationObject).Close();
}

三、驗證與常見坑

  • 確認 NetTcpActivator Windows Service 已啟動。
  • 防火牆開放 TCP 808 埠。
  • .svc 檔案必須存在於應用實體路徑。
  • 應用程式池身分需具備足夠權限 (通常 NetworkService 即可)。

總結

WAS + WCF Listener/Adapter 架構,讓 IIS 成為真正的通用應用程式伺服器,支援 TCP、Named Pipe、MSMQ 等高效能協定,且享有 IIS 的進程管理、回收、監控等企業級特性。

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