天道酬勤,学无止境

asp.net

c# await task - local variables being changed unexpectedly

问题 我刚刚开始在我正在编写的一些方法中实现异步编程。 业务逻辑是接受入站调用,如果项目不在全局缓存中,则处理它,或者如果它是,则只需更新将在稍后在代码中处理的条目。 但是,我看到一些我无法理解的奇怪行为。 我的单元测试向我的 QueueProcessor 方法提交了两个请求(每次调用之间有 2 秒的延迟)。 为了测试,我有目的地在另一个方法中使用了 task.delay,QueueProcessor 在处理请求时将调用该方法。 这模拟了一个真实世界的测试用例,我们在处理第一个请求时阻止了其他请求。 我在名为 ProcessRoutine 的子方法范围内使用了一个局部变量。 但是由于某些原因,当第二次调用更新全局缓存时,仅在 ProcessRoutine 方法范围内的局部变量也发生了变化。 此外,第二个请求将仅执行更新全局缓存变量然后停止的操作逻辑。 所以没有其他代码被触发。 我已经通过我的日志确认了这一点。 我只是不明白为什么 ProessRoutine 方法中传递的数据集可以通过这种方式进行更改。 public async Task<bool> QueueProcessor(RtcPluginModel_IncidentModel passInModel) { //Ensure the processing cache is instantiated if

2022-07-11 09:46:15    分类:技术分享    c#   asp.net   asynchronous   asp.net-web-api

SQL Query to transpose rows into columns

问题 我有一个使用 SQL Server 2008 的 .net Web 应用程序。我试图在网格中显示的数据表包含实际上是另一个表的行的列。 现在,我在 BLL 中执行此操作,将数据读入数据表; 从另一个表中获取数据并将其放入第一个数据表的列中,然后遍历该数据表中的每一行数据以填充新列。 非常耗时且缓慢。 我相信这可以通过在 SQL 2012 及更高版本中使用“Transpose”或类似的查询来完成,但不确定在 2008 年是否可能。我研究并尝试使用“pivot”,但我不擅长 SQL,不能让它工作。 这是数据库表的简化示例,我需要显示: Facility Table: FacilityID 12345 67890 PartnerInfo table: PartnerID Partner 1 Partner1 2 Partner2 3 Partner3 FacilityPartner table: FacilityID PartnerID 12345 1 12345 3 67890 2 67890 3 需要一个查询来返回类似的东西: FacilityID Partner1 Partner2 Partner3 12345 true false true 67890 false true true 回答1 declare @facility table (facilityId int)

2022-05-17 05:28:08    分类:技术分享    asp.net   sql-server-2008

ASP.NET Core and JQuery unobtrusive AJAX not working

问题 如果我在 .net 4.5 中开始一个新项目并点击管理 nuget 包,搜索 ajax,然后点击 install 让 ajax 不显眼。 然后我可以进入我的cshtml文件并输入@Ajax.___ 例如@Ajax.beginForm 如果我使用 Dot Net Core 创建一个新项目......我不能,而是它给了我一个无用的错误: “当前上下文中不存在名称‘Ajax’” 我在网上搜索过,什么都没找到... 基本上我想用 Ajax 调用制作一个表单,就像你在 .net 中所做的那样 如: " @using (Ajax.BeginForm("EmployeeMaster", "Home", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divEmp" })) { " 有谁知道我还能尝试什么? 在上面,我可以看到 Ajax 是来自 System.web.mvc.webviewpage 的 AjaxHelper 类型的对象......所以也许它永远不会适用于 .net 核心 回答1 虽然Ajax.BeginForm()方法不起作用,但实际不显眼的 Ajax html 可以。 C# 方法只是帮助生成 Html 表单标签。 请原谅我在这些语法中是错误的,这是记忆中的,但你明白了 @using (Ajax

2022-05-17 05:18:54    分类:技术分享    asp.net   ajax   asp.net-core   unobtrusive-ajax

ASP.NET Webforms with async/await

问题 我基于 .Net 4.6 的 Webforms 应用程序必须非常广泛地使用 async/await 功能。 因为我对这个 async/await 主题很陌生,所以我阅读了很多类似这样或这样的最佳实践。 但是我仍然有一些问题,我没有找到任何明确的信息。 关于 Page-Lifecycle-Events:我知道,例如对于 Page_Load-Event,最好的做法是避免异步 void 方法并注册这样的方法: protected void Page_Load(object sender, EventArgs e) { PageAsyncTask pageAsyncTask = new PageAsyncTask(SomeAsyncMethod); Page.RegisterAsyncTask(pageAsyncTask); //Method to invoke the registered async-methods immedietly and not after the PreRender-Event Page.ExecuteRegisteredAsyncTasks(); } 我的问题是我想在注册后立即调用异步方法,而不是在 OnPreRender 事件之后。 这应该通过调用 ExecuteRegisteredAsyncTasks() 方法来实现。 但在我的情况下,这没有效果

2022-05-17 03:24:10    分类:技术分享    asp.net   asynchronous   webforms   async-await

Plugin architecture [closed]

问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。 如果您认为此问题可以改进并可能重新打开,请访问帮助中心获取指导。 9 年前关闭。 我正在尝试了解插件架构。 特别是在 Windows Live Writer 的实现中使用的一种。 我指的是您可以通过添加/删除 DLL(+ config)来配置/启用/禁用/添加/删除附加功能的样式。 我希望在基于 Web 的应用程序中看到类似的东西。 谁能指出我正确的方向? 提前致谢。 -SK 回答1 看看这篇文章。 简而言之,您需要在较高级别执行以下操作。 定义插件必须实现的接口为插件 dll 创建一个具有特定权限的子目录定义一个配置部分或文件,指定从插件 dll 动态加载的类型。 使用 AppDomain 将插件配置和目录中的 dll 加载到安全沙箱中 我希望这有帮助。 回答2 您的问题被标记为 ASP.NET,但我没有在您的问题中看到任何 ASP.NET 特定内容。 可插入的 ASP.NET 是可能的,但很难使用 System.AddIn,即 MAF。 我设法在大约 4 天内创建了一个安全的网站插件概念验证。 http://suburbandestiny.com/Tech/?p=585 http://suburbandestiny.com/Tech

2022-05-17 02:59:24    分类:技术分享    c#   asp.net

Get file upload data from post data in ASP.NET

问题 我正在循环浏览表单上发布的值,以期对它们进行处理(因此无法访问控件本身)。 这是我必须承担这个项目的过程,所以这就是我这样做的原因。 在表单上,​​我将有一个文件上传框,但我不确定如何上传从中选择的文件,因为我不能只做Control.SaveAs() 。 当我使用Request.Form.Item[i]返回发布的值时,我得到了我选择的文件名,但不是我期望的完整路径。 有人可以指出我正确的方向吗? 谢谢。 回答1 回答2 文件上传控件只传递文件名和内容。 我不确定您为什么需要文件夹名称,特别是因为文件夹名称将用于客户端 - 我不能指望这对您有任何价值,因为您想将文件保存在服务器上。 由于我不确定您的目标,我建议您使用Server.MapPath("~/Folder")找到一个合适的文件夹来保存您上传的文件到

2022-05-17 02:54:08    分类:技术分享    asp.net   http-post

How to combine asynchrony with locking?

问题 正如 Stephen Cleary 的著名博客文章所指出的那样,永远不要尝试同步运行异步代码(例如通过Task.RunSynchronously()或访问Task.Result )。 另一方面,您不能在lock语句中使用 async/await。 我的用例是 ASP.NET Core 应用程序,它使用IMemoryCache来缓存一些数据。 现在当数据不可用时(例如缓存被删除)我必须重新填充它,并且应该用lock保护它。 public TItem Get<TItem>(object key, Func<TItem> factory) { if (!_memoryCache.TryGetValue(key, out TItem value)) { lock (_locker) { if (!_memoryCache.TryGetValue(key, out value)) { value = factory(); Set(key, value); } } } return value; } 在这个例子中,工厂函数不能是异步的! 如果它必须是异步的,应该怎么做? 回答1 协调对共享变量的异步访问的一种简单方法是使用 SemaphoreSlim。 您调用WaitAsync开始异步锁定,并调用Release结束它。 例如 private static readonly

2022-05-17 02:50:45    分类:技术分享    c#   asp.net   .net   asynchronous

Asp.Net Core with Docker - Duplicate 'Content' items were included

问题 当我想使用 docker 部署我的应用程序时遇到问题。 我正在将 ASP.Net Core 与 docker 一起使用。 这是一条错误消息: /usr/local/share/dotnet/sdk/1.0.4/Sdks/Microsoft.NET.Sdk/build/Microsoft.NET.Sdk.DefaultItems.targets(188,5):错误:包含重复的“内容”项目。 默认情况下,.NET SDK 包含项目目录中的“内容”项。 您可以从项目文件中删除这些项目,或者如果您想将它们明确包含在项目文件中,则将“EnableDefaultContentItems”属性设置为“false”。 有关详细信息,请参阅 https://aka.ms/sdkimplicititems。 重复的项目是:'wwwroot/_version.txt' [/Users/xxxxxx/Projects/api-test/TestApi/TestApi.csproj] 这是我的 csproj <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp1.1.1</TargetFramework> <DockerComposeProjectPath>..\docker-compose

2022-05-17 01:05:11    分类:技术分享    c#   asp.net   .net   docker   asp.net-core

use https on asp.net application running on localhost

问题 我创建了一个 asp.net Web 应用程序,其中包含一个名为“Main.aspx”的 Web 表单。 我正在尝试通过 https 运行应用程序。 由于我没有使用 SSL、IIS 等的经验。我用谷歌搜索了如何实现这一点,但每个解决方案都不适用于我。 我使用以下步骤启用了 SSL:启用 SSL 我的应用程序现在在 https://localhost:59917/ 上运行。 但是如果我启动我的应用程序,我会收到一条 Firefox 错误消息:“安全连接失败”。 所以我按照 Scott Gu 的博客文章中的步骤进行操作,但也没有用。 有没有人在 SSL 和 ASP.net Web 应用程序方面有经验并且可以帮助我? 回答1 如果您按照说明进行操作,您应该已经在端口443上配置了您的网站。 您应该在端口59917上配置绑定

2022-05-17 00:26:04    分类:技术分享    asp.net   ssl   iis   https

XML Serializiation migration to MySql

问题 我有一个 ASP.NET 项目,它使用 XML 序列化作为保存数据的主要操作。 该项目相对于数据大小保持较小。 但是,数据量一直在膨胀,现在我正在考虑转向基于 SQL 的替代方案来管理数据。 现在我定义了多个对象,它们只是用于保存我的数据以供项目工作的存储类。 public class Customer { public Customer() { } public string Name { get; set; } public string PhoneNumber { get; set; } } public class Order { public Order() { } public int ID { get; set; } public Date OrderDate { get; set; } public string Product { get; set; } } 沿着这些路线的东西虽然不是那么简陋。 迁移到 SQL 似乎是一件轻而易举的事,而且由于该服务的免费可用性,我已经开始使用 MySql。 我遇到的是,我现在能看到的唯一方法是有一个解决方案,其中有一个存储类Order和一个用于加载/保存数据的类OrderIO 。 该项目严重依赖于使用 List<> 来填充页面上的数据字段。 我没有使用任何内置的 .NET 控件(例如 DataGrid)来帮助显示数据。 在

2022-05-16 21:08:13    分类:技术分享    asp.net   mysql