承上篇伺服器端主控台程式,本文展示 ASP.NET WebForms 頁面作為 NamedPipe 客戶端,向本機/遠端管道伺服器發送指令並接收回應。
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 內部預設逾時,若伺服器未啟動會拋出例外。Connect/Write/Read 為同步呼叫,高併發場景建議改用非同步模式或連線池。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 原專案。