我是ASP.NET MVC 5的新手,所以我试图尽可能地通过练习来学习它.
所以我正在考虑使用ASP.NET MVC的新OWIN实现来实现我的项目的身份验证和授权.也就是说,我正在以一种可以与各种类型的数据库一起工作的方式构建项目.
到目前为止,我使用了通用的ADO.NET元素(例如DbDataReaderetc),我拒绝使用任何ORM.所以我想知道我是否可以继续使用ASP.NET的新身份系统,或者如果我这样做,我将被绑定到Entity Framework和SQL Server吗?
我们最近开发了一个基于SOA的站点,但是当它负载不足时,该站点最终出现了可怕的负载和性能问题.我在这里发布了一个与此相关的问题:
该网站由被一个4节点集群,其中托管另一个4节点集群上并且对API调用的web站点上托管的API(WEB API)位点组成.两者都是使用ASP.NET MVC 5开发的,所有操作/方法都基于async-await方法.
在一些监控工具(如NewRelic)下运行站点,调查几个转储文件并分析工作进程后,发现在非常轻的负载下(例如16个并发用户),我们最终拥有大约900个线程,这些线程利用了100%的CPU并填满了IIS线程队列!
尽管我们通过引入大量缓存和性能修正设法将网站部署到生产环境,但我们团队中的许多开发人员认为我们必须删除所有异步方法并将API和网站转换为普通的Web API和Action方法.只需返回一个Action结果.
我个人对方法不满意,因为我的直觉是我们没有正确使用异步方法,否则就意味着微软已经引入了一个基本上具有相当破坏性和无法使用的功能!
您是否知道有哪些参考文献可以清楚地知道应该/可以使用异步方法的位置和方式?我们应该如何使用它们来避免这种戏剧?例如,根据我在MSDN上阅读的内容,我认为API层应该是异步的,但网站可能是一个普通的无异步ASP.NET MVC站点.
更新:
以下是与API进行所有通信的异步方法.
public static async Task<T> GetApiResponse<T>(object parameters, string action, CancellationToken ctk)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(BaseApiAddress);
var formatter = new JsonMediaTypeFormatter();
return
await
httpClient.PostAsJsonAsync(action, parameters, ctk)
.ContinueWith(x => x.Result.Content.ReadAsAsync<T>(new[] { formatter }).Result, ctk);
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法有什么愚蠢的吗?请注意,当我们将所有方法转换为非异步方法时,我们获得了更好的性能.
这是一个示例用法(我已经删除了与验证,日志记录等相关的代码的其他位.此代码是MVC操作方法的主体).
在我们的服务包装中:
public async static Task<IList<DownloadType>> GetSupportedContentTypes()
{
string userAgent = Request.UserAgent;
var parameters = new { Util.AppKey, Util.StoreId, QueryParameters = new { UserAgent …Run Code Online (Sandbox Code Playgroud) 我有一个div标签内的树(id:treePanel).这个树实际上是一堆<div>嵌套在几个级别的<ul> and <li>标签(标签在另一个<ul>标签内部,依此类推.
我需要在这个树(其中一个<ul>标签)中找到一个具有特定文本并更新它的节点.我怎么能用<li>jquery做到这一点?
例:
<div id="treePanel">
<ul>
<li> root 1</li>
<li> root 2</li>
<li> root 3
<ul>
<li> leaf1</li>
<li> leaf2</li>
<li> find me</li>
</ul>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
提前致谢
我在运行 Windows 10.0.17134 的个人计算机上创建了一个 asp.net core mvc 3(预览版)的 docker 映像。我的 docker 将 Windows Server Nano 映像归档
从 microsoft/dotnet:3.0-aspnetcore-runtime-nanoserver-1809 AS base ...
此映像已发布到 AWS ECS 上的存储库,我的设置任务和服务以及集群一切正常。
但是我的容器无法启动,出现以下错误:
状态原因CannotPullContainerError:基于Windows 10.0.17134 版的映像与10.0.14393 主机不兼容
我确定我在主机上运行 Widows 服务器,为什么它抱怨我的主机是 Windows 10.0.14393 ?那是我个人笔记本电脑上的 Windows 版本!
据我所知,.NET 4.5附带了许多功能,可以使异步数据库操作更容易实现.MSDN说如果连接字符串没有设置为异步工作,ADO.NET的异步方法都不会以异步方式工作.因此,SqlConnectionStringBuilder附带了一个名为AsynchronousProcessing的属性.
我想知道这些异步功能是否也适用于其他数据库服务器(例如mysql)?如何使异步使用.NET无法识别的无SQL数据库?(例如RavenDB)?
我使用Unity与Unity.MVC5.注册类型和依赖项解析程序的类如下:
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container
.RegisterType<ILogger, Nlogger>()
.RegisterType<IDataAccessLayer, SqlDataAccessLayer>()
.RegisterType<IEventBusiness, EventBusiness>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Global.asax代码:
void Application_Start(object sender, EventArgs e)
{
UnityConfig.RegisterComponents();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
在我的一个控制器中,我有一个这样的属性:
[Dependency]
public IEventBusiness EventBusiness { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望Unity自动设置此属性,但它始终为null.有人能帮助我弄清楚我做错了什么吗?
我有一个带有数值的文本文件(比如说1).我使用以下命令打开并读取文件:
<BuildVersionFile Include="$(MSBuildProjectDirectory)\BuildNumber.txt"/>
<Target Name="ReadReleaseNotes">
<ReadLinesFromFile
File="@(BuildVersionFile)" >
<Output
TaskParameter="Lines"
ItemName="Build
Version"/>
</ReadLinesFromFile>
Run Code Online (Sandbox Code Playgroud)
我想增加BuildVersion的值并将其写回txt文件.我怎么能做这个数学?
我运行一个返回10个结果的查询.我的文档中有一个名为Type的属性.某些记录的此属性的值为空字符串,而对于某些其他记录,则为"AudioAlbum"或"AudioRington".
我想做两件事:1-从搜索结果中排除其Type属性没有值的文档.2-仅获取AudioAlbums(作为不同的搜索).
我获取AudioAlbums的搜索代码是这样的:
var docs = client.Search<content>(
b => b.Type("content")
.Query(q => q.Fuzzy(fz => fz
.OnField("title").Value(keyWord)
.OnField("artists.name")))
.Filter(x => x.Term("type", "AudioRingtone")))
.Documents.ToList();
Run Code Online (Sandbox Code Playgroud)
如果没有Filter扩展方法,我会得到10条记录(包括两条AudioAlbums).当我添加.Filter方法时,我得到零记录.
另外,我想排除Type属性没有值的记录.我的代码(下面给出)再次没有记录任何结果:
BaseFilter notFilter = Filter.Not(x => Filter.Term("Type", string.Empty));
var docs = client.Search<content>(
b =>
b.Type("content")
.Query(q => q.Fuzzy(fz =>fz.OnField("title")
.Value(keyWord)
.OnField("artists.name")))
.Filter(notFilter)).Documents.ToList();
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?
async-await ×2
c# ×2
.net ×1
ado.net ×1
amazon-ecs ×1
asp.net-mvc ×1
asynchronous ×1
docker ×1
element ×1
filter ×1
find ×1
jquery ×1
math ×1
msbuild ×1
nest ×1
owin ×1
performance ×1
sql-server ×1