关注点:
我已经阅读了描述 IIS 可以随时回收应用程序池的帖子/博客。这是否意味着(就 IIS 回收应用程序池而言)我是否同步或异步调用长时间运行的进程并不重要,因为 IIS 可以回收应用程序池并终止长时间运行的进程?如果是这种情况,确保这种情况不会发生的常见途径是什么?
例子
public Task<ActionResult> LongRunningProcessAsync(SubmitFileModel aModel)
{
return Task.Run( () => LongRunningProcess( aModel) );
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来拦截/获取在匹配路由之前所做的请求.例如,我有多个控制器和路由设置,但我想要一些机制,在路由方法被命中之前将被击中.如果这种机制能够获得发送的路径参数,那将是非常可取的.
我一直无法找到类似于我正在寻找的东西(但可能不熟悉Web API我用错误的关键字搜索).
我的控制台项目正在运行4.7.1(<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>)
它引用了.NET Standard 2.0项目"TimeUtility":
解决方案在本地构建良好,但CI构建中出现以下错误:
项目"C:\ TFS\agent_work\21\s\Services\Daemons\ReportDaemon\ReportDaemon\ReportDaemon.sln"(1)正在构建"C:\ TFS\agent_work\21\s\Core\TimeUtility\src\TimeUtility \节点1上的TimeUtility.csproj"(14:15)(默认目标).PrepareForBuild:创建目录"bin\Release \netcoreapp2.0 \".C:\ Program Files(x86)\ dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(167,5):错误:资产文件'C:\ TFS\agent_work\21\s\Core\TimeUtility\src\TimeUtility\obj\project.assets.json'没有'.NETCoreApp,Version = v2.0'的目标.确保还原已运行,并且已在项目的TargetFrameworks中包含"netcoreapp2.0".C:\ Program Files(x86)\ dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(167,5):错误:资产文件'C:\ TFS\agent_work\21\s\Core\TimeUtility\src\TimeUtility\obj\project.assets.json'没有'.NETCoreApp,Version = v2.0'的目标.确保还原已运行,并且已在项目的TargetFrameworks中包含"netcoreapp2.0".[C:\ TFS\agent_work\21\s\Core\TimeUtility\src\TimeUtility\TimeUtility.csproj]完成构建项目"C:\ TFS\agent_work\21\s\Core\TimeUtility\src\TimeUtility\TimeUtility.csproj "(默认目标) - 失败.
我尝试过多种想法,但到目前为止已经成功了.
.Net Framework 4.7.1
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{66A8B6CC-ED2E-43B5-B91E-6F018B827DD4}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>ReportDaemon</RootNamespace>
<AssemblyName>ReportDaemon</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> …Run Code Online (Sandbox Code Playgroud) 我目前正在考虑使用async/await功能:
为此,我将使用Json异步更新页面/进度条.
我预见到的问题是:
当我打电话给提交者去控制器时,我需要对每个呼叫进行响应.在我提交文件并完成一些处理(确定每个Call节点)之前,我不知道文件中有多少个调用.是否有一个干净的方法来获取我添加到列表中的每个已完成项目的响应?
目前看一下使用signalR在处理时向用户呈现文件的进度报告.我正在使用asp.net MVC 4.在通过Ajax进行发布/获取时,我可以轻松获得状态更改.
因为我需要上传一个文件(没有ajax,因为1:我不能要求用户启用js才能提交文件; 2:我不相信它可以随时执行这样的任务,除了HTML5) .
编辑: 当我说我不能要求用户拥有JS时,我的意思是提交文件不能依赖JS,因为这是一个核心功能.但是,我希望那些启用了JS的人能够看到处理/导入到另一个程序的进度.我目前没有兴趣/关心实际的文件传输进度,但更多的是将状态消息发送回导入程序的当前状态.
在我调用Post表单后,为了实现更新进度的目标,将建议采用什么方法?注意:
示例代码:
$(function () {
var fileUploadHub = $.connection.fileUploadHub;
fileUploadHub.updateProgress = function (value) {
updateProgressBar(value);
};
fileUploadHub.updateStatusText = function (text) {
alert("you got to updateStatus");
updateText(text);
};
$.connection.hub.logging = true;
$.connection.hub.start();
});
function updateProgressBar(value) {
$("#progressbar").progressbar({ value: value });
}
function updateText(text) {
$("#statusText").append("<li>" + text + "</li>");
}
Run Code Online (Sandbox Code Playgroud)
//表单:由模型支持
@using (Html.BeginForm( "UploadFile", "FileUpload", FormMethod.Post,
new { enctype = "multipart/form-data"}))
{
<input type="file" id="Files" name="Files" accept="text/xml" />
<br />
<input type="submit" id="submitButton" …Run Code Online (Sandbox Code Playgroud)