簡體   English   中英

安裝 .NET 包以用於 IIS Web 服務器 (Windows Server 2019)

[英]Installing .NET packages for use in IIS web server (Windows Server 2019)

我對 Windows Server 很陌生,我並不完全理解它是如何工作的。

我的任務非常簡單:在使用 IIS 在 Windows Server 2019 中運行的現有網站上,我需要添加一些發出一些 HTTP 請求的后端 C# 代碼。 雖然我可以在我的 Web.config 文件中添加“System.Net.Http”,但這似乎還不夠。 據我了解,我需要未提供的“System.Net.Http.Extensions”或“System.Net.Http.Formatting”。 據我了解,兩者中的后者已被棄用。

我通過以下錯誤得出這個結論:

CS1061: 'System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>' does not contain a definition for 'IsSuccessStatusCode' and no extension method 'IsSuccessStatusCode' accepting a first argument of type 'System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>' could be found (are you missing a using directive or an assembly reference?)

default.aspx 相關代碼:

<script runat="server" language="C#">   
    static readonly HttpClient client = new HttpClient();
    void GetToken()
    {
        var request = new HttpRequestMessage(HttpMethod.Post, "URL");
        request.Content = new FormUrlEncodedContent(new Dictionary<string, string> {
            { "client_id", "ID" },
            { "client_secret", "SECRET" },
            { "grant_type", "client_credentials" }
        });
        var response = client.SendAsync(request);
        if(response.IsSuccessStatusCode)
        {
            var payload = JObject.Parse(await response.Content.ReadAsStringAsync());
            var token = payload.Value<string>("access_token");
            Response.Write(token);          
        }
    }
</script>

起初,我嘗試使用dotnet命令進行安裝。 但它似乎在這個系統上不存在(由於某種原因,我似乎根本找不到 .NET 安裝......)

經過大量挖掘,我設法使用 powershell Install-Package Microsoft.Net.Http安裝它。 它還安裝了幾個依賴項。

運行以下命令: ([system.reflection.assembly]::loadfile("C:\Program Files\PackageManagement\NuGet\Packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll")).FullName我得到System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ,這就是我在 Web.config 中使用的。

我仍然在添加擴展包的行上遇到錯誤: Could not load file or assembly 'System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. Could not load file or assembly 'System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我在谷歌上讀過的任何東西都沒有用。 我嘗試將程序集綁定包含到我的 Web.config 中,沒有任何區別。

對於應該如何安裝和使用軟件包,我真的很迷茫。

Web.config 當前:

<configuration>
    <system.web>
        <httpRuntime targetFramework="4.5" />
        <compilation>
            <assemblies>
                 <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
                 <add assembly="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </assemblies>
        </compilation>
    </system.web>
</configuration>

系統中也沒有安裝visual studio。 我不知道我之前的人是如何在這台服務器上工作的,

好吧,那是你的大部分挑戰。

你不要在網絡服務器上嘗試安裝這個,那個,以及更多。

你要做的是獲得源代碼和項目。 然后您在您的計算機上開發應用程序。 這就是新代碼、新依賴以及編寫新代碼和開發過程的地方。

一旦您對結果感到滿意,您將構建並發布您的應用程序的這個新的下一個偉大版本到 Web 服務器。 這個發布的“行為”會讓你的代碼編譯,所有的 .dll 和依賴構建,為你創建,結果就是發送到 web 服務器的內容。

換句話說,您可能有 2 或 5 個不同的網站在該服務器上運行。 每個在他們的網站應用程序上工作的開發團隊都不會弄亂、玩弄或擔心 Web 服務器。 因此,您需要獲取開發人員工具和環境設置。 並且這些工具(如 Visual Studio)肯定不會被放置或存在於某些 Web 服務器上。 Web 服務器的工作是提供網頁——而不是真實地展示您的軟件開發過程和周期。

關於您需要確定的唯一主要問題?

那么,開發模型是使用asp.net網站應用程序,還是asp.net網站?

它們聽起來很相似,但是這兩種開發(和部署)模型非常不同。

但是,要修改代碼,修改這個網站?

毫無疑問,您確實需要設置開發環境,這無疑需要您在計划用於此類軟件開發的計算機上設置並擁有和安裝 Visual Studio。

因此,您可以在該站點和代碼庫上修改、創建、更改和進行標准開發。 當您准備好、高興並根據自己的喜好測試了工作代碼時?

然后,只有這樣,您才能編譯、構建並將生成的系統發布到 Web 服務器。 但是,您當然不必四處亂逛,也不必開始安裝諸如 .net 庫和應用程序的位和部分之類的東西。 甚至使用 3rd 方庫代碼 - 比如 ghostscript.net 或其他什么? 這將是您構建過程的一部分,並且在發布操作期間,這些庫和代碼將被發送、發布並包含在您生成的 Web 應用程序中。 因此,您不必在 Web 服務器上做太多事情。 唯一的例外是您的網站正在運行 .net 4.0,而您決定為該網站使用最新的 .net 版本 (4.8)?

那么您可能必須安裝並確保 .net 4.8 存在於該 Web 服務器上,但是對於所有其他引用、庫代碼以及網站使用的引用和代碼? 這將在您的計算機上構建時解決,您只需將生成的網站“構建”發送到 Web 服務器。

那么,如果您開始使用一些 .net 庫(例如 zipping 庫)或其他一些庫? 您不會在 Web 服務器上安裝這些庫 - 使用 Visual Studio 發布和構建您的應用程序負責該過程。

因此,幾乎不可能修改 Web 服務器上的網站。 當然,唯一真正的例外是他們使用的是網站,而不是網站應用程序。 在這種情況下,可以從 Visual Studio 直接打開網站(假設您在同一個網絡上),但即便如此,嘗試修改、調試、更改和測試也不是什么好主意實時網站,因為我們假設用戶正在使用該網站。

Visual Studio 會自動安裝其“自己的”Web 服務器,因此您可以在網站副本上構建、測試、運行和工作。 一旦一切如您所願,您就可以將您的工作應用程序發布到實時網絡服務器。

底線:

如果您要進行 asp.net 開發,那么您需要為此目的而設計的工具 - 任何其他半生不熟的方法就是這樣 - 半生不熟。

因此,如果沒有所需的 asp.net 開發工具,就不能要求您進行任何類型的 asp.net 開發,這真的很簡單。 但是話又說回來,鑒於您有責任在 asp.net 網站上工作,那么以上所有內容都應該一目了然,如果您實際上是 asp.net 開發人員,則無需考慮以上任何內容。 如果你不是,那么你需要成為一個有經驗的asp.net開發者,或者找一個有這種經驗的人。

編輯:有關項目類型的更多信息

另外,一個問題:我嘗試在 Visual Studio 上查看很多項目類型,但似乎沒有一個與服務器使用的相匹配。

好吧,您擁有 20 多年的 Visual Studio 經驗,並且每年都有大量資金投入到 .net 框架中。 所以,有一大堆項目類型!!!

有些項目類型非常相似,但從部署的角度來看卻非常不同。

因此,第一步是確定您是否有源代碼。 就像桌面開發一樣,我可以為您提供源代碼,或者我可以編譯說桌面程序代碼,並將生成的應用程序交給您。 在那個已編譯的應用程序中,您仍然會看到構成應用程序的大量“表單”和位和部分,但源代碼當然會被刪除。

.net Web 項目也是如此。 雖然大多數 Web 系統都基於腳本語言(瀏覽器端和服務器端),但這里的關鍵概念是服務器端代碼將用 c# 或 vb.net 編寫(順便說一下,您應該找出哪個)。

因此,當將此類項目部署到網站時,有不同的方法。

在某些項目中(取決於項目的類型),源代碼也放在服務器上。 當加載一個 aspx 頁面時,相應的頁面(通常稱為代碼隱藏)也被加載,並由 IIS(Web 服務器)編譯。 所以這是一個按需編譯加載設置。

以上通常稱為asp.net 網站。

但是您也有所謂的 asp.net 網站應用程序的情況。 (最后一部分“應用程序”是一個大問題。這意味着 Visual Stuido 將構建和編譯代碼,然后發布到 Web 服務器。這意味着 vb.net/c# 源代碼不包含在網站中,它也沒有發布,因此 Web 服務器 IIS 不必按需編譯代碼 - 它在部署之前已經編譯!!! 這很重要,因為這個選擇將決定您是否在該網站上擁有源代碼, 或者您需要獲取/查找/擁有/采購用於構建該網站的原始項目。因此,我關於訪問該網站的評論很可能是 100% 浪費您的時間,因為您沒有為該網站管理、更改或開發所需的項目文件。

那么,雖然 Visual Studio (VS) 中有大量的項目類型,從智能手機開發到桌面到控制台應用程序?

這是一個僅包含 Web 項目的簡單列表 - vb.net 選擇(對於 c# 項目,您有相同的列表!!!!)。

這個選擇:

在此處輸入圖像描述

(還有更多——上面的卷軸!!!)。

因此,您需要查看/檢查/確定源代碼是否已放置/發布到 Web 服務器。 如果沒有,那么您的第一步就是獲取用於構建該網站的源代碼和項目 - 沒有它,您將在沒有燈的房間里尋找東西。

因此,假設您有一個網頁(通常稱為 Web 表單,但這取決於這是一個 Web 表單項目,還是一個更老的項目,即經典的 ASP.net,甚至比 Web 表單更老)。

因此,您可能有一個名為 BookingExpand2.aspx 的頁面。 這將有頁面的標記(但是,非常重要的是,它是服務器端的 asp.net 標記。它可以有普通的 jane HTML,但它也會有 .net 控件和東西。但是,在大多數情況下,它是HTML 標記,並且還會有相當多的 .net 標記(比如一個網格視圖控件)。然后對於那個相同的 aspx 頁面,你有一個包含代碼的文件(用 vb.net 或 c# 編寫)。這個所謂的頁面后面的代碼將被調用:

如果是 vb.net,那么:

BookingExpand2.aspx.vb

如果是 c#,那么

BookingExpand2.aspx.cs

在上面,我們將看到/擁有簡單的 jane 服務器端代碼——在這個例子中是 vb.net 代碼。

所以,標記頁面,可能有這個和更多:

在此處輸入圖像描述

所以,上面是 asp.net 標記。 它將有 HTML,但也有許多豐富的 asp.net 控件。

然后是帶有 .vb 的網頁名稱(或 .cs 用於 c#)。

因此,該頁面將具有簡單的 jane .net 代碼。 它可能看起來像這樣:

在此處輸入圖像描述

所以,當我運行這個頁面時,我得到了這個:

在此處輸入圖像描述

因此,該頁面具有引導程序(使其看起來更好),使用引導程序中的類,並且該頁面還具有 jQuery 和其他部分 - 與大多數網頁和系統非常相似。 但是,頁面的代碼和事件不必在客戶端,也不必有 JavaScript。 雖然網格(使用了帶有嵌套網格視圖控件的列表視圖,但我沒有也沒有為上面的頁面編寫任何 JavaScript - 但如果你願意,你可以)。

所以,在上面,有一個按鈕來展開行 - 顯示在那個房間預訂的人。 該代碼是單擊按鈕,並且是服務器端代碼。

在此處輸入圖像描述

現在我們看到了:

在此處輸入圖像描述

因此,請注意上面的內容,這里沒有編寫客戶端腳本。 它只是一個按鈕,帶有事件單擊,當單擊時,它會運行按鈕單擊代碼。 這與使用桌面 ms-access 甚至 VB 桌面程序不同。 因此,控件被拖放到頁面中,然后為這些控件編寫服務器端(vb.net 或 c#)代碼。

那么,如果在您擁有的那個網站或文件夾中,您是否有 .cs (c#) 或 .vb (vb.net) 文件? (因為如果您不這樣做,那么在您掌握用於使用 Visual Studio 構建該站點的源代碼和文件之前,您不能對站點進行更改)。

根據您的其他問題 - 不,這些較舊的項目沒有也不使用 cshtml 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM