我已经检查过,当我将ASP.NET5部署到azure web应用程序时,在Web响应中服务器是IIS,所以我想IIS平台处理程序用于将其重定向到Kestrel.所以我想知道是否可以直接在Kestrel上运行,以及有什么好处/缺点(可能无论是否在Azure中).我想它会更快一些,因为IIS将从pipline中排除,但我认为它不应该是太多的开销......
我需要在我的asp.net核心应用程序中运行长时间运行的后台任务.我知道Azure Webjobs和其他进程外技术,但我宁愿保持解决方案简单并直接在asp.net核心进程中运行这些任务.我使用Kestrel,应用程序托管在IIS中.
我知道IIS偶尔会回收IIS进程.它还会回收asp.net核心流程吗?
我试图找出修改kestrel 从Startup类构造函数侦听的URL的正确方法.
更新:除了下面的答案,我已经明白Startup类不是以我想象的方式配置Kestrel.我原以为Startup会创建一个单独的应用程序范围的配置对象,它可以通过约定来定位,但事实并非如此.正如@Tseng所指出的,应用程序和托管的配置是另外一个问题.链接的答案和接受的答案提供了工作示例.
我在Vagrant中创建了一个全新的Ubuntu 14盒子,并根据Microsoft当前的说明安装了ASP.NET Core 1.1:https://www.microsoft.com/net/core#linuxubuntu
我跑了:
默认情况下,它侦听http:// localhost:5000.在Program.cs中,我可以调用app.UseUrls("http://*:5001),这可以改变URL和端口.
我真正想要的是通过在Startup类中添加一个新的JSON设置文件来按照惯例更改URL,所以我按照示例创建了一个hosting.JSON文件(注意:我已经尝试过"server.urls"和"网址"作为关键).
{
urls: "http://*:5001"
}
Run Code Online (Sandbox Code Playgroud)
在Startup.cs下面添加appsettings.json文件的默认行我添加了.AddJsonFile("hosting.json",可选:false); (可选:false以确保它正在拾取文件)
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("hosting.json", optional: false);
if (env.IsDevelopment())
{
// For more details on using the user secret store see https://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
我已经验证配置构建后设置是否存在,但是当在Program.cs中构建主机时,它没有被选中或使用
public class Program
{
public static void …Run Code Online (Sandbox Code Playgroud) 我有一个使用Kestrel在Linux上运行的asp .net核心应用程序。
它绑定到端口80上的ip ok。
但是Nginx反向代理站点需要在非根路径下托管应用程序,例如
这样就可以了,应用程序加载了,但是应用程序不知道myapp路径-因此尝试从根目录加载内容路径资源。因此,CSS资源等不加载。
如何理想地在运行时配置应用程序以了解URL路径。
更新:
我发现在Startup.configure中使用app.UsePathBase(“ / myapp”); 应用程式会提供协助,因为应用程式会在这个OK路径上处理要求-但静态档案要求则是/myapp/images/example.jpg,传回404。
images文件夹位于wwwroot中-据我所知是UseStaticFiles的默认文件夹。
我希望该请求能够理解/ myapp实际上是虚拟的。
在 IIS 8+ 上托管(非核心)ASP.net 站点时,可以利用IIS 应用程序初始化模块在 IIS 启动时主动初始化(“预热”)Web 应用程序(或者,我相信,当应用程序池被回收时)。据我所知,在 IIS 上托管 .net Core 应用程序时这是不可能的。
我还注意到,在 IIS 上托管 .net Core (1.1) 应用程序时,dotnet.exe进程 (Kestrel) 作为应用程序池回收事件的一部分被终止。此过程仅在发出第一个新请求时才重新启动。
我问以下问题是因为我正在使用 Hangfire (Core) 和一个经常性的后台作业,并且希望在没有人长时间访问该站点时仍然执行该作业。
在 IIS 上托管核心应用程序时,使用计划的应用程序池回收功能有什么意义吗?我能找到的唯一参考是 Github repo 上的一个问题。
如果是这样,是否可以在应用程序池回收后自动初始化站点或启动 Kestrel(通常默认情况下每 29 小时发生一次)。
iis hangfire kestrel-http-server asp.net-core asp.net-core-2.0
当指定要绑定的端口时,.UseKestrel()我得到下面列出的错误..但是如果我删除 kestrel 选项,如果我从浏览器检查 API,一切正常。
我尝试绑定到我的应用程序默认使用的端口而不选择netstat任何端口,并且我尝试检查以主动避免任何正在使用的端口。除了完全删除选项外,什么都不起作用。这不会在我的 Mac 或另一台 Windows 10 机器上复制。此设备是 Windows 10。
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 50470);
options.Listen(IPAddress.Any, 80);
})
: Microsoft.AspNetCore.Server.Kestrel[0]
Overriding address(es) 'http://localhost:50470/'. Binding to endpoints defined
in UseKestrel() instead.
crit: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to start Kestrel.
System.Net.Sockets.SocketException (10013): An attempt was made to access a
socket in a way forbidden by its access permissions
at
System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException
(SocketError error, String callerName)
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress
socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.
BindAsync() at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.
<>c__DisplayClass21_01.<<StartAsync>g__OnBind|0>d.MoveNext() …Run Code Online (Sandbox Code Playgroud) 我有一个有两个端点的 ASP.NET Core 应用程序。一个是MVC,另一个是Grpc。我需要 kestrel 在不同的套接字上发布每个端点。示例:localhost:8888 (MVC) 和 localhost:8889 (Grpc)。
我知道如何在 Kestrel 上发布两个端点。但问题是它在两个端点上都发布了 MVC 和 gRPC,我不想要那样。这是因为我需要 Grpc 请求使用 Http2。另一方面,我需要 MVC 请求使用 Http1
在我的 Statup.cs 上我有
public void Configure(IApplicationBuilder app)
{
// ....
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<ComunicacaoService>();
endpoints.MapControllerRoute("default",
"{controller}/{action=Index}/{id?}");
});
// ...
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来endpoints.MapGrpcService<ComunicacaoService>();在一个套接字上和endpoints.MapControllerRoute("default","{controller}/{action=Index}/{id?}");另一个套接字上发布。
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!” 来自...\BlazorApp1\BlazorApp1\Shared\LoginDisplay.razor右上方的以下剃须刀组件 ( )。
<AuthorizeView>
Hello, @context.User.Identity.Name!
</AuthorizeView>
Run Code Online (Sandbox Code Playgroud)
如果使用 Kestrel 运行,则不会显示该消息。所以我尝试了以下步骤使其在 Kestrel 中工作。
导入 NuGet 包 Microsoft.AspNetCore.Authentication.Negotiate
添加以下代码ConfigureService()中Startup.cs。
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
Run Code Online (Sandbox Code Playgroud)
Configure()中Startup.cs。它们被添加到app.UseRouting();和之间app.UseEndpoints(...; app.UseAuthentication();
app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)
它仍然不显示 Hello 消息。我读到“允许匿名请求。使用 ASP.NET Core 授权来挑战匿名身份验证请求。” 在文档中,所以我做了以下操作来禁用匿名请求。
在 中_Host.cshtml,在 之后添加了以下几行@namespace BlazorApp1.Pages。
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
Run Code Online (Sandbox Code Playgroud)
但是,消息还是不显示?这是否意味着授权不起作用?
更新:
我将文件更新...\BlazorApp1\BlazorApp1\Shared\LoginDisplay.razor为
<AuthorizeView>
<Authorized>
Hello, @context.User.Identity.Name!
</Authorized>
<NotAuthorized>
You …Run Code Online (Sandbox Code Playgroud) razor web 应用程序无法再在我的计算机上启动。
构建命令dotnet build按预期工作,但dotnet run在第一次警告后卡住了。
C:\dev\mywebapp>dotnet run
Building...
C:\dev\mywebapp\Pages\Admin\Orders\TraderOrderList.cshtml.cs(101,17):
warning CS0219: The variable 'orderId' is assigned but its value is
never used [C:\dev\mywebapp\MyWebApp.csproj]
C:\dev\mywebapp\Pages\Index.cshtml.cs(23,24):
warning CS0414: The field 'IndexModel._currentAd' is assigned but its value is
never used [C:\dev\mywebapp\MyWebApp.csproj]
--- after here it is stuck no more output and i stopped it after about 3 minutes
Run Code Online (Sandbox Code Playgroud)
c:\dev\webtemp>dotnet new webapp -o HelloWebAppc:\dev\webtemp\HelloWebApp>dotnet run。所以这按预期工作。我在 stackoverflow 上搜索了其他问题,但没有遇到同样的问题。
我有以下内容
[HttpPost]
public IActionResult LaunchExternalProcess()
{
Process.Start("C:\\Windows\\System32\\calc.exe");
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
这在我的本地计算机上运行得很好,但是当部署到 IIS 10(Windows 2016)上时,我没有收到任何错误,但它不会在服务器上启动计算。
我只想通过页面上的按钮调用外部 .exe。
这是我正在使用的 javascript,它也适用于我的本地,但在服务器上没有错误,并且显示成功消息
$.ajax({
url: "/Admin/LaunchExternalProcess",
type: "POST",
cache: false,
success: function () {
console.log("success");
}
});
Run Code Online (Sandbox Code Playgroud) iis asp.net-core-mvc kestrel-http-server asp.net-core asp.net-core-2.0