Windows Server 2016安裝ASP.NET 1.1 程式

前言

部門最近接了一個Server的升級案

是舊RADAR從 Server2008 中文版 升級至 Server2016 英文版

所跑的程式是.NET 1.1 和 .NET 2.0

安裝的過程中,有遇到不少問題,在這裡簡單的分享…

英文版Server可能會遇到的問題

RADAR的程式有很多讓使用者看的字,來源是存在一個.resx的檔案中

一樣的程式放到英文版,有機會出現亂碼,因為英文版的系統並不支援Unicode

此次遇到的是如下圖的錯誤

解決方法

設定步驟:
1. 前往 Windows Control Panel
2. Clock, Language, and Region
3. Language
4. Change date, time or number formats
5. 切換至 Administrative 設定頁
6. 在 Languages for non-Unicode programs
7. Change system locale
8. 選擇 Chinese (Traditional, Taiwan)
9. 更改並儲存設定後,重新登入使用者或重開機,再檢查是否中文仍是顯示亂碼。

參考網址:https://blog.xuite.net/alec5439/BlueFantasy/421692858-英文版本+Windows+10+中文顯示亂碼+解決方法

也會遇到 網頁出現錯誤訊息 “zh-Hant-TW 是無效的文化特性識別項”

如圖所示

解決方法

「控制台\所有控制台項目\語言\進階設定」中,將「適用於網路內容的語言」下勾選「不要讓網站存取我的語言清單。將改用我的日期、時間和數字格式設定的語言」。如下圖

參考網址:https://dotblogs.com.tw/rainmaker/2012/10/21/78733

 

ASP.NET 1.1 會遇到的問題

  1. 新增IIS的應用程式集區時 根本就沒有.NET 1.1可以選

解決方法

Server 2016的.NET 1.1 必須透過手動安裝

https://docs.microsoft.com/zh-tw/dotnet/framework/install/run-net-framework-1-1-apps

安裝方法參考下列網址

https://dotblogs.com.tw/rainmaker/2015/01/22/148232

安裝後,如果還是沒有.NET 1.1的選項可以選

刪除c:\Windows\Microsoft.NET\Framework64\v1.1.4322目錄後,打開cmd

執行

Step1: MKLINK /d c:\Windows\Microsoft.NET\Framework64\v1.1.4322 c:\Windows\Microsoft.NET\Framework\v1.1.4322

切換目錄

Step 2 : cd C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

執行

Step 3 :Aspnet_regiis.exe –i

Step 4 :iisreset

執行完之後,重開IIS 管理員,應用程式集區就多了1.1可以選了,再手動新增1.1進去

 

2.確定程式選擇正確的應用程式集區,程式執行時卻出現以下的錯誤

因為server不認得.NET 1.1的元件

需在config裡加上一段

<system.webServer>

<handlers>

<add name=”ASPNET-ISAPI-1.1-WebServiceHandlerFactory” path=”*.asmx” verb=”GET,HEAD,POST,DEBUG” modules=”IsapiModule” scriptProcessor=”C:\Windows\Microsoft.Net\Framework\v1.1.4322\aspnet_isapi.dll” resourceType=”Unspecified” preCondition=”classicMode,runtimeVersionv1.1,bitness32″ />

<add name=”ASPNET-ISAPI-1.1-SimpleHandlerFactory” path=”*.ashx” verb=”GET,HEAD,POST,DEBUG” modules=”IsapiModule” scriptProcessor=”C:\Windows\Microsoft.Net\Framework\v1.1.4322\aspnet_isapi.dll” resourceType=”Unspecified” preCondition=”classicMode,runtimeVersionv1.1,bitness32″ />

<add name=”ASPNET-ISAPI-1.1-HttpRemotingHandlerFactory-soap” path=”*.soap” verb=”GET,HEAD,POST,DEBUG” modules=”IsapiModule” scriptProcessor=”C:\Windows\Microsoft.Net\Framework\v1.1.4322\aspnet_isapi.dll” resourceType=”Unspecified” preCondition=”classicMode,runtimeVersionv1.1,bitness32″ />

<add name=”ASPNET-ISAPI-1.1-PageHandlerFactory” path=”*.aspx” verb=”GET,HEAD,POST,DEBUG” modules=”IsapiModule” scriptProcessor=”C:\Windows\Microsoft.Net\Framework\v1.1.4322\aspnet_isapi.dll” resourceType=”Unspecified” preCondition=”classicMode,runtimeVersionv1.1,bitness32″ />

<add name=”ASPNET-ISAPI-1.1-HttpRemotingHandlerFactory-rem” path=”*.rem” verb=”*” modules=”IsapiModule” scriptProcessor=”C:\Windows\Microsoft.Net\Framework\v1.1.4322\aspnet_isapi.dll” resourceType=”Unspecified” preCondition=”classicMode,runtimeVersionv1.1,bitness32″ />

<remove name=”ASPNET-ISAPI-1.1-AXD” />

<add name=”ASPNET-ISAPI-1.1-AXD” path=”*.axd” verb=”GET,HEAD,POST,DEBUG” modules=”IsapiModule” scriptProcessor=”C:\Windows\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll” resourceType=”Unspecified” requireAccess=”Script” preCondition=”classicMode,runtimeVersionv1.1,bitness32″ />

</handlers>

</system.webServer>

 

但加了這段可能會出現以下錯誤是它不認得system.webServer這個標籤

在 C:\Windows\Microsoft.Net\v1.1.4322\Config\machine.config的<configSection>標籤中加上一段

<section name=”system.webServer” type=”System.Configuration.IgnoreSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ />

讓它可以認得<system.webServer>這個標籤

3.某些欄位在 Server 端無法取得 Post 上來的值

開啟 IE 開發者工作->網路 查看值有 Post 上去 Server

↓程式的寫法

這次遇到的問題是它的name與程式設定的不符,送上去的欄位名稱為 txtLEVDay$EditText,所以取不到值

因為目前程式都改成用 Request 所以就先解決 Web Control 在 Client 端的 Name 分隔符號從 : 改成 $ 。 .NET 1.1 時,分隔符號是使用 : ,到了 .NET 2.x 時,就改成了 $ ,如果要維持用 : 分隔的話,要在 web.config 中加入 <xhtmlConformance mode=”Legacy” /> 的設定,詳細請參考「https://weblogs.asp.net/scottgu/gotcha-don-t-use-xhtmlconformance-mode-legacy-with-asp-net-ajax

另外,txtLEVDay等欄位是 Server Web Control 取值,應該只需要 txtLEVDay.RealText 就可以了,但取到的值卻是空值。查看 Post 的行為是 CallBack ,ASP.NET CallBack 在 .NET 2.x 時,會有取不到更新值的問題,詳細可以查看 “Asp.NET 2.0 Callback無法讀到其他input現值問題與解決方式 「https://dotblogs.com.tw/rainmaker/2009/09/30/10847」”

 

其他問題

1.IIS驗證問題

客戶要用windows驗證的方式登入

但點開系統都會一直導向SC30的登入畫面

解決方法參考網址

http://www.dotblogs.com.tw/rainmaker/archive/2013/11/29/131973.aspx

建置後

檢查top.aspx 驗證方式

匿名驗證要關掉,開啟windows驗證及表單驗證

 

2. MSDTC錯誤

因為以前的系統,Operation Service需要MSDTC的服務

要先請客戶的MIS開通AP 跟 DB 雙向的port

AP跟DB都要開服務跟防火牆!

這次在安裝客戶測試機時,僅這樣安裝,Service即可使用

但客戶的正式機DB有兩台,是用always on

對方的DBA在DTC設定時,

僅設定cluster的DTC允許網路DTC,並未設定local DTC允許網路DTC

導致那些Service皆不通…

 

 

 

 

發表迴響