我在ASP.Net MVC中创建一个ActionResult来提供图像.启用会话状态后,IIS将一次只处理来自同一用户的一个请求.(这不仅适用于MVC.)
因此,在具有多个图像回调此Action的页面上,一次只能处理一个图像请求.这是同步的.
我希望这个图像Action是异步的 - 我希望每次执行多个图像请求而不需要前一个完成.(如果图像只是静态文件,IIS会以这种方式为它们提供服务.)
所以,我想禁用Session仅用于对该Action的调用,或者指定某些请求没有Session状态.任何人都知道如何在MVC中完成这项工作?谢谢!
背景:
我们正在构建一个应用程序,允许我们的客户以预定义(即我们无法控制)的XML格式提供数据.XSD由第三方提供给我们,我们期望在我们处理它之前收到一个传递模式验证的XML文件.
问题:
我们提供的XSD包括默认和目标命名空间,这意味着如果客户提供的XML文件不包含命名空间,则验证将通过.我们显然不希望他们提供说他们通过但不应该提供的东西,但更大的问题是如果我找不到解决办法,我们需要对每个元素进行额外的检查. XML验证.
问题:
是否可以强制.NET执行验证并忽略提供的XML和XSD上的命名空间.即以某种方式"假设"命名空间被附加.
我到目前为止的解决方案:
示例Xml:
<?xml version="1.0"?>
<xsd:schema version='3.09' elementFormDefault='qualified' attributeFormDefault='unqualified' id='blah' targetNamespace='urn:schemas-blah.com:blahExample' xmlns='urn:blah:blahExample' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
...
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
与命名空间不同
<?xml version="1.0" encoding="UTF-8" ?>
<root xmlns="urn:myCompany.com:blahExample1" attr1="2001-03-03" attr2="google" >
...
</root>
Run Code Online (Sandbox Code Playgroud)
没有命名空间.
<?xml version="1.0" encoding="UTF-8" ?>
<root attr1="2001-03-03" attr2="google" >
...
</root>
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个查询放在一起,该查询将在一段时间内检索用户的统计信息(利润/损失)作为累积结果.
这是我到目前为止的查询:
SELECT p.name, e.date,
sum(sp.payout) OVER (ORDER BY e.date)
- sum(s.buyin) OVER (ORDER BY e.date) AS "Profit/Loss"
FROM result r
JOIN game g ON r.game_id = g.game_id
JOIN event e ON g.event_id = e.event_id
JOIN structure s ON g.structure_id = s.structure_id
JOIN structure_payout sp ON g.structure_id = sp.structure_id
AND r.position = sp.position
JOIN player p ON r.player_id = p.player_id
WHERE p.player_id = 17
GROUP BY p.name, e.date, e.event_id, sp.payout, s.buyin
ORDER BY p.name, e.date ASC
Run Code Online (Sandbox Code Playgroud)
查询将运行.但是,结果略有不正确.原因是一个人event可以有多个游戏(有不同的sp.payouts …
我们在使用LINQ的代码段中遇到了轻微的性能问题,并且提出了一个关于LINQ如何在查找方面工作的问题
我的问题是这个(请注意我已经更改了所有代码,因此这是代码的指示性示例,而不是真实场景):
特定
public class Person {
int ID;
string Name;
DateTime Birthday;
int OrganisationID;
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个说100k Person对象的列表,然后是一个日期列表,比如1000,我运行了这段代码:
var personBirthdays = from Person p in personList
where p.OrganisationID = 123
select p.Birthday;
foreach (DateTime d in dateList)
{
if (personBirthdays.Contains(d))
Console.WriteLine(string.Format("Date: {0} has a Birthday", d.ToShortDateString()));
}
Run Code Online (Sandbox Code Playgroud)
结果代码将是以下迭代:
100k(用于查找具有organisationID 123的用户需要完成的循环)
乘以
1000(列表中的日期数量)
乘以
x(具有要检查的组织ID 123的用户数量的日期) )
这是很多迭代!
如果我将personBirthdays的代码更改为:
List<DateTime> personBirthdays =
(from Person p in personList
where p.OrganisationID = 123
select p.Birthday).ToList();
Run Code Online (Sandbox Code Playgroud)
这应该删除100k作为倍数,并只执行一次?
所以你会有100k +(1000*x)而不是(100k*1000*x).
问题是,这似乎太容易了,我确信LINQ在某个地方做了一些聪明的事情应该意味着这不会发生.
如果没有人回答,我会进行一些测试并报告.
清晰度更新:
我们不考虑数据库查找,该personList …
所以我花了最后几个小时寻找答案,我似乎找不到任何有意义的东西.
public class Game
{
public virtual Guid ID { get; set; }
public virtual ResultStructure Structure { get; set; }
public virtual List<Result> Results { get; set; }
}
public class Result
{
public virtual Player Player { get; set; }
public virtual int Position { get; set; }
}
public class ResultStructure
{
public virtual Guid ID { get; set; }
public virtual List<ResultOutcomes> Outcomes { get; set;}
}
public class ResultOutcomes
{
public virtual int Position { …Run Code Online (Sandbox Code Playgroud) 我正在尝试确定一个非常长的(imho)初始启动ASP.NET应用程序的原因.
该应用程序使用各种第三方库,并且我确信可以合并许多引用,但是,我正在尝试识别(并分配责任)dll以及它们对扩展启动过程的贡献.
到目前为止,启动时间从2-5分钟不等,具体取决于盒子上其他东西的使用情况.基于网站的复杂性,我认为这是不可接受的,我需要将其减少到最大30秒的范围内.
为了清楚我正在寻找的性能范围,它是从第一个请求到初始Application_Start方法被击中的时间.
那么我将从哪里开始获取有关加载哪些DLL的信息,以及加载所需的时间,以便我可以尝试将成本/收益放在一起,以便我们需要解决/整合.
从能力的角度来看,我一直在使用JetBrains dotTrace,我很清楚应用程序在应用程序之后如何对应用程序进行基准测试,但它看起来不在应用程序代码之内,因此在我目前知道.
我正在寻找的是如何在第一个入口点进入我的代码之前了解正在发生的事情的方法.
注意:我知道我可以在回收/升级上调用默认页面来进行初始加载,但我宁愿解决实际问题而不是通过它来解决问题.
注2:硬件在功能方面有足够的扩展和分离,因此我很确定这不是问题.
我们最近遇到了性能问题,突出了我需要确认的内容.
当您包含这样的包时:
@Scripts.Render("~/jquery)
Run Code Online (Sandbox Code Playgroud)
这似乎正在运行(使用dotTrace确定,并看到它正在运行):
Microsoft.Ajax.Utilities.MinifyJavascript()
Run Code Online (Sandbox Code Playgroud)
对于包含include的页面的每个请求,以及对脚本本身的调用.
我很欣赏在现实世界的场景中,只有1次点击脚本,因为客户端会缓存它.然而,至少可以说它似乎效率低下.
问题是,这是预期的行为,就好像它不是,我想解决它(所以任何建议),但如果是,我们可以预先缩小脚本.
UPDATE
因此,即使我将编译模式更改为debug,它仍然会触发minify方法.它输出各个网址,但仍然试图缩小它.
但是,如果删除对渲染方法的所有引用,它不会尝试缩小任何内容,并且不会快速运行,不会使应用程序池膨胀,也不会使Web服务器上的CPU最大化.
asp.net-mvc bundling-and-minification webgrease asp.net-bundling
在与Microsoft许可代表交谈时,我刚刚发现了一些非常奇怪的东西,我想让这个话题绕过社区,看看是否有人意识到这一点。
我问有关许可SQL Server / Windows Server的问题,这导致我被推荐为不使用Windows用户的网站的外部连接器许可。
我将其归结为以下基本情况:
服务器1:
运行IIS 7.5的Windows Server 2008 R2,使用自定义的面向公众的网站,该网站使用本地增长的身份验证机制(即,本地Windows用户或AD用户),其中用户(不确定或不经过身份验证)的数量不确定。
服务器2:
Windows Server 2008 R2,运行SQL Server 2008 R2。
服务器1上的网站使用经过SQL身份验证的登录名连接到服务器2上的SQL Server。
所需的许可是:服务器1的Windows Server许可服务器2的Windows Server许可SQL Server“每处理器”许可和服务器2的外部连接器许可。
这似乎很荒谬,因为它使Server 2的Windows许可证的成本增加了三倍。另外,就SQL Server而言,没有多个客户端连接,只有一个“设备”可以在顶部提供大量的“增值”仅来自SQL Server的数据。
我的问题是,有人遇到过吗?似乎这是错误的,因为我想这是大多数用于创建网站的.NET软件公司最常见的情况,并且经过数次的工作,我从未听说过!
我看过这个问题:
但是,它实际上没有关于场景等的足够信息,也没有引用任何适当的资源。
如果有人可以实际指向一个信誉良好的站点中有关此内容的部分,而不仅仅是指向通用“客户许可”页面的链接,我将不胜感激。
基本上,我想在我的MVC站点内的页面上打印一个列表,该列表显示应用程序使用的所有程序集以及版本信息.
我不想只在bin目录中包含那些,我想使用更准确的方法.
所以例子就是
我想知道bin目录中的哪个dll正在被使用.对于其中的每一个,我需要查看它们的依赖程序集(带有它们的版本信息).
我想知道哪些dll是从GAC等引用的.
我希望尽可能多地提供相关信息,因此有关组件所期望的版本以及应用程序所采用的信息将非常有用.
对此有任何标准方法吗?
谢谢,马丁
c# ×5
asp.net ×3
asp.net-mvc ×2
linq ×2
actionresult ×1
asynchronous ×1
iis ×1
nhibernate ×1
performance ×1
postgresql ×1
queryover ×1
sql ×1
sql-server ×1
webgrease ×1
xml ×1