繁体   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