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

解決伺服器/虛擬主機不支援 AjaxPro 的終極設定指南

     編輯:ASP.NET 基礎

AjaxPro 早期流行的 ASP.NET AJAX 庫,透過 `.ashx` 處理器實現客戶端直接呼叫伺服器端方法。部署至虛擬主機常因 ISAPI 對應缺失導致 404/500。本文提供完整設定檢查清單。

核心問題:.ashx 未對應至 aspnet_isapi.dll

虛擬主機 IIS 預設可能未將 `.ashx` 延伸模組對應至 ASP.NET 執行引擎,導致 AjaxPro 處理器無法啟動。

解決步驟 (需主機商協助或具 IIS 管理權限)

1. IIS 網站屬性 → 主目錄 → 設定 → 新增應用程式對應

  • 執行檔:`C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll`
  • 副檔名:`.ashx`
  • 動作:`GET,HEAD,POST,DEBUG`
  • 核取「確認檔案是否存在」取消勾選 (關鍵!否則實體 .ashx 不存在時會 404)

Web.config 註冊 AjaxPro HttpHandler

<system.web>
  <httpHandlers>
    <!-- AjaxPro 1.x -->
    <add verb="POST,GET" path="AjaxPro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro" />
    <!-- 或 AjaxPro 2.x -->
    <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" />
  </httpHandlers>
</system.web>

<!-- IIS 7+ 整合模式 -->
<system.webServer>
  <handlers>
    <add name="AjaxPro" verb="POST,GET" path="AjaxPro/*.ashx" 
         type="AjaxPro.AjaxHandlerFactory, AjaxPro" preCondition="integratedMode" />
  </handlers>
</system.webServer>

伺服器端註冊可被 AJAX 呼叫的類型

protected void Page_Load(object sender, EventArgs e)
{
    // 註冊當前頁面類別 (或任意類別) 的公用方法供客戶端呼叫
    AjaxPro.Utility.RegisterTypeForAjax(typeof(YourPageClass));
}

伺服器端方法標記 [AjaxMethod]

[AjaxPro.AjaxMethod]
public DataSet GetUserList()
{
    string sql = "SELECT UserID, UserName FROM Users";
    return DataAccess.ExecuteDataSet(sql);
}

客戶端 JavaScript 呼叫

<script type="text/javascript">
function LoadUsers() {
    // 命名空間:Namespace.ClassName.MethodName(callback)
    YourNamespace.YourPageClass.GetUserList(OnGetUsersComplete);
}

function OnGetUsersComplete(response) {
    var ds = response.value; // DataSet 物件 (AjaxPro 自動序列化)
    var html = "";
    for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
        html += ds.Tables[0].Rows[i].UserName + "<br/>";
    }
    document.getElementById("userList").innerHTML = html;
}
</script>

<button onclick="LoadUsers()">載入使用者</button>
<div id="userList"></div>

常見部署錯誤排查

現象可能原因解決
404 Not Found.ashx 未對應 ISAPI / 路徑大小寫不符檢查 IIS 對應、Web.config path 大小寫
500 Internal Server Error型別載入失敗 / 組件版本不符確認 Bin 目錄有 AjaxPro.dll、版本匹配
response.value 為 undefined回傳型別不支援序列化 (如 DataReader)改回傳 DataSet、List、自訂 DTO
JavaScript 錯誤 "AjaxPro undefined"未引用自動生成的 .js 檔頁面加入 ``

現代化替代方案建議

  • ASP.NET Web API / ASP.NET Core MVC:RESTful、標準 JSON、支援所有前端框架。
  • SignalR:雙向即時通訊。
  • PageMethods / ScriptManager:內建無需第三方庫。
  • jQuery $.ajax + [WebMethod]:輕量、相容性佳。

AjaxPro 已停止維護多年,新專案強烈建議採用現代架構;維護舊專案時,上述 ISAPI 對應設定通常能解決 90% 的部署問題。

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