我们正在构建一个ASP.NET MVC应用程序,该应用程序将部署在硬件负载平衡器后面,该负载平衡器支持缓存等.
我们的建议是手动定义负载均衡器应缓存哪些URL模式.这对我们来说是一个非常简单的过程,因为我们的"目录"页面是相对静态的,然后是"订单"页面,而不是.
必须避免在缓存页面上使用会话状态,因为负载均衡器会缓存整个响应 - 这包括发送的任何cookie.
理想情况下,会有一个属性可以应用于控制器或动作方法,允许选择性地使用会话状态,但似乎没有.我意识到,如果使用离开"会话区域",这样的方法会导致会话丢失 - 这很好.
除了重新实现整个ASP.NET MVC HTTP控制器...任何建议?
提前致谢.
我的web.config中有以下配置:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/Error.html">
<error statusCode="404" redirect="~/Error/Error.html" />
<error statusCode="400" redirect="~/Error/Error.html" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
FWIW,这是一个ASP.NET MVC 3应用程序.
当我生成错误.例如通过访问..
http://testserver/this&is&an&illegal&request
Run Code Online (Sandbox Code Playgroud)
..被ASP.NET请求验证阻止..返回错误页面,但没有内容类型标头.IE推断内容并呈现HTML,但Firefix(正确IMO)将内容视为文本并显示HTML代码.
是否需要采取其他步骤来说服ASP.NET发送内容类型标头?我认为这与它从文件系统中挑选文件的事实有关,但是MIME类型似乎在服务器上正确配置.
在微软的AJAX Minifier提供了一个构建任务,可以在TFS或本地构建定义使用.
我在本地项目文件(构建到单独的文件)和TFS构建定义(覆盖现有的JS文件)中都使用了这个.
我想转而使用Visual Studio 2010的一键发布功能而不是TFS构建定义,但是在项目文件中将缩小任务添加为AfterBuild目标似乎不会影响单击发布功能.
使用此线程和这些 文章中的信息,我尝试在我的WAP根目录中创建一个名为"[ProjectName] .wpp.targets的文件,并使用以下XML:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<Target Name="Minify" BeforeTargets="MSDeployPublish">
<ItemGroup>
<JS Include="**\*.js" Exclude="**\*.min.js;**\*vsddoc.js;**\*debug.js" />
</ItemGroup>
<ItemGroup>
<CSS Include="**\*.css" Exclude="**\*.min.css" />
</ItemGroup>
<AjaxMin JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" CssSourceFiles="@(CSS)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".min.css" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
这似乎没有任何效果,不幸的是,Visual Studio对这些工具的反馈或调试信息没有太多帮助.
有没有人使用Visual Studio 2010一键发布功能来缩小JavaScript/CSS?
在如果按运行一个Web项目的Visual Studio Go调试工具栏上的按钮,然后按停止Stop调试工具栏上的按钮,IE浏览器是由IDE打开和关闭.
有没有办法阻止IDE在停止调试时关闭Internet Explorer?我想这样做是为了让我自己在编辑代码时引用IE中页面的内容.
我们的SCM结构如下:
Main
|--Release
Run Code Online (Sandbox Code Playgroud)
开发人员检查主要.当我们想要发布时,我们挑选从Main到Release的合并变更集,测试并运行我们的部署构建,构建和部署应用程序并标记发布分支.
要合并,我会使用Source Control Explorer右键单击'Main'> Branching and Merging> Merge.选择"选定的变更集"只有一个目标分支(发布).选择更改集,在本地测试,签入发布.这已经好几个月了.
但是,今天一些非常早期的变更集刚刚出现在源控件合并向导中,位于列表的顶部.但奇怪的是,不是全部.
等效的CLI命令是
tf merge /candidate /recursive [source] [destination]
Run Code Online (Sandbox Code Playgroud)
此命令返回以下列表:
3* Person.One 27/11/2009
43* Person.Two 21/12/2009
50* Person.Two 22/12/2009
54* Person.Two 22/12/2009
57* Person.Two 22/12/2009
114* Person.One 12/01/2010
116* Person.One 13/01/2010
128* Person.One 15/01/2010
138* Person.One 19/01/2010
139* Person.One 19/01/2010
7846 Person.Three 19/01/2012
7847 Person.Three 19/01/2012
7848 Person.Three 19/01/2012
7849 Person.Three 19/01/2012
8030 Person.Four 31/01/2012
8031 Person.Four 31/01/2012
8032 Person.Four 31/01/2012
8045 Person.Five 01/02/2012
8050 Person.Four 01/02/2012
8052 Person.Six 01/02/2012 …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET MVC应用程序,它返回404,偶尔会在各种适当的点返回500个状态代码.
Response.StatusCode = (int)HttpStatusCode.NotFound;
Run Code Online (Sandbox Code Playgroud)
当我设置其中一个状态代码时,我还适当地设置了TrySkipIisCustomErrors属性.
Response.TrySkipIisCustomErrors = true
Run Code Online (Sandbox Code Playgroud)
我现在要做的是,配置IIS来传递这些我自己设置的错误,并捕获可能发生的任何其他错误(例如静态文件上的404,我没有向ASP.NET发送请求,我的应用程序中有500个错误或未被捕获的错误(可能是框架没有设置TrySkipIisCustomErrors属性).
我的system.webServer/httpErrors节点如下所示:
<httpErrors existingResponse="Auto" errorMode="Custom">
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
这将返回我自己的ASP.NET错误,其中我设置了TrySkipIisCustomErrors = true,以及未捕获的500s,静态文件404等的标准IIS错误页面.
然后我尝试像这样修改它:
<httpErrors existingResponse="Auto" errorMode="Custom" defaultPath="/Skins/Shared/Error/Error.html" defaultResponseMode="ExecuteURL">
<clear />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
我相信这应该显示我的自定义错误页面,而不是标准的IIS页面.但是,当我添加此代码时,我得到一行IIS错误("由于发生了内部服务器错误,因此无法显示页面.")并返回500状态代码.
我认为这是由于我的配置错误,但我不能为我的生活了解我做错了什么!
我也试过这种方法,结果相同:
<httpErrors existingResponse="Auto" errorMode="Custom" defaultPath="Skins\Shared\Error\Error.html" defaultResponseMode="File">
<clear />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
即使将重定向设置为完全不同的URL也会产生同样的问题.
我一直在使用此页面作为参考:http://blogs.iis.net/ksingla/archive/2008/02/18/what-to-expect-from-iis7-custom-error-module.aspx.
错误文件肯定存在,我可以使用浏览器直接命中它.
顺便说一句,我不完全确定我应该使用system.Web\customErrors节点做什么.这是一个仅限IIS6的设置,还是以某种方式与ASP.NET相关?目前我没有将它包含在我的web.config中.
我们正在使用 PostgreSQL 数据库和 AppFabric 服务器,运行一个中等繁忙的 ASP.NET MVC 电子商务站点。
遵循缓存侧模式,我们从缓存中请求数据,如果不可用,则查询数据库。
这种方法会导致“查询风暴”,即数据库在短时间内收到对同一数据的多个查询,同时正在刷新缓存中的给定对象。更长时间运行的查询会加剧这个问题,显然对同一数据的多个请求会导致查询运行更长时间,形成令人不快的反馈循环。
此问题的一种解决方案是对缓存使用读锁定。然而,这本身可能会导致在 Web 场情况下(甚至在单个繁忙的 Web 服务器上)的性能问题,因为 Web 服务器在读取时被无故阻止,以防发生数据库查询。
另一种解决方案是放弃缓存侧模式并独立地为缓存设定种子。这是我们为缓解我们在此问题上看到的直接问题而采取的方法,但并非所有数据都可以这样做。
我在这里错过了什么吗?人们采取了哪些其他方法来避免这种行为?
在一个非常典型的场景中,我的Web应用程序上有一个"搜索"文本框,其中用户输入直接传递给存储过程,然后使用全文索引搜索两个表中的两个字段,这两个表使用适当的键连接.
我正在使用CONTAINS谓词来搜索字段.在传递搜索字符串之前,我执行以下操作:
SET @ftQuery = '"' + REPLACE(@query,' ', '*" OR "') + '*"'
Run Code Online (Sandbox Code Playgroud)
例如,将城堡改为"*"或"城堡*".这是必要的,因为我希望人们能够在cas上搜索并获得城堡的结果.
WHERE CONTAINS(Building.Name, @ftQuery) OR CONTAINS(Road.Name, @ftQuery)
Run Code Online (Sandbox Code Playgroud)
问题是,现在我已经附加通配符每个单词的末尾,噪音词(如该)也通配符追加,因此不再出现会被丢弃.这意味着搜索城堡将返回带有剧院等单词的项目.
将OR更改为AND是我的第一个想法,但如果在查询中使用了干扰词,则似乎只返回不匹配.
所有我试图实现是允许用户输入多个空格分隔单词respresent无论是整体还是他们搜索的词的前缀,以任意顺序-落音词,如在从输入(否则当他们搜索城堡时,他们会得到一个大项目列表,结果他们需要在列表中间的某个位置.
我可以继续实现我自己的干扰消除程序,但似乎全文索引应该能够处理的东西.
感谢任何帮助!
杰米