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

C# NamedPipe 進程間通訊實戰 (二) - ASP.NET 客戶端範例

     編輯:關於C語言

承上篇伺服器端主控台程式,本文展示 ASP.NET WebForms 頁面作為 NamedPipe 客戶端,向本機/遠端管道伺服器發送指令並接收回應。

客戶端程式碼 (Default.aspx.cs)


using System;
using System.Web.UI;
using AppModule.InterProcessComm;
using AppModule.NamedPipes;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(SendRequest("測試訊息 from ASP.NET"));
    }

    private string SendRequest(string request)
    {
        string response = "";
        IInterProcessConnection client = null;
        try
        {
            client = new ClientPipeConnection("np-test-by-jinjazz", "."); // "." 表本機
            client.Connect();
            client.Write(request);
            response = client.Read();
            client.Close();
        }
        catch (Exception ex)
        {
            client?.Dispose();
            response = $"錯誤: {ex.Message}";
        }
        return response;
    }
}

關鍵點

  • 管道名稱:np-test-by-jinjazz 需與伺服器端完全一致。
  • 伺服器名稱:"." 代表本機;跨機器時填入伺服器 NetBIOS 名稱或 IP (需網路命名管道支援、防火牆開放 445/SMB)。
  • 連線逾時:ClientPipeConnection 內部預設逾時,若伺服器未啟動會拋出例外。
  • ASP.NET 權限:應用程式集區身分識別需具備網路存取權 (跨機器時) 或本機管道存取權。
  • 同步阻塞:Connect/Write/Read 為同步呼叫,高併發場景建議改用非同步模式或連線池。

測試環境與驗證

  • Windows Vista / Server 2008 / 2012 / 2016 / 2019 / 10 / 11 均支援。
  • 啟動伺服器主控台 → 瀏覽 ASP.NET 頁面 → 頁面顯示伺服器回傳字串 (如 get:測試訊息 from ASP.NET)。

生產環境強化建議

議題對策
連線池封裝 ClientPipeConnection 為可重用物件池,避免頻繁建立/銷毀管道
非同步 I/O使用 PipeStream.BeginRead/EndRead 或 .NET 6+ NamedPipeClientStream.ReadAsync
序列化協定定義 JSON/Protobuf/MessagePack 訊息格式,支援複雜物件傳遞
安全性管道 ACL 限制存取帳號;傳輸層加密 (TLS/自簽憑證) 或應用層簽名驗證
健康檢查定期發送 Heartbeat 指令,偵測伺服器存活

完整專案結構:AppModule.InterProcessComm (介面) + AppModule.NamedPipes (實作) + Server (主控台) + WebClient (ASP.NET)。源碼參考 CodeProject 原專案。

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