我继承了第三方编写的前端.该前端通过不同第三方编写的程序与Oracle交互.有问题的存储过程需要2分36秒才能在手动执行时返回搜索结果.我看不到该过程,该团队建议我增加Web应用程序中的超时(托管在共享服务器上).
在我的世界中,超过30秒的任何事情都需要在部署到生产之前进行性能修复,只有少数例外(遗留代码,疯狂报告等).建议给我的选项是将超时从30秒(由前端开发人员明确添加)增加到180秒.
我向您提出的问题: 采用简单方法和增加超时有什么风险?如果可能,请提供支持您观点的文章的链接,以便我可以参考.
如果你认为这是一个非问题,也可以随意加入.
我希望能够访问经过身份验证的用户(如UserId和FirstName)的自定义属性,而无需每次都查询数据库.我通过Stack Overflow上的帖子找到了这个网站,我喜欢这种方法 - 但我使用IoC /存储库并决定不尝试使用global.asax与数据库进行通信,因为它担心它与存储库模式不兼容.
相反,我创建了一个CustomPrincipal接口,我使用IoC(Castle)创建一个实例并将其传递给控制器(以及随后传递给我的基本控制器).
基本控制器使用我在CustomPrincipal中创建的方法来实现博客作者在global.asax中处理的相同任务.即,CustomPrincipal从数据库或缓存初始化并分配给HttpContext.Current.User.
我的控制器/视图然后可以引用属性如下...
((ICustomPrincipal)(HttpContext.Current.User)).FirstName;
Run Code Online (Sandbox Code Playgroud)
它有效,但我感觉到一些代码味道.首先,如果我从控制器引用HttpContext,我已经杀死了我的单元测试.我正在考虑修改我的CustomPrincipal对象以返回上面的值(这样我可以在我的单元测试中模拟它)但我想知道这是否是一个解决方法而不是一个好的解决方案.
我是以正确的方式来做这件事的吗?我是否可以做一些小的调整以使其成为一个强大的解决方案,或者我应该从头开始使用FormsAuthenticationTicket或其他类似的东西?
谢谢!
在ASP.NET MVC 2中,TempData值会持续到会话结束或读取为止.用微软的话说 ......
TempData的值一直存在,直到读取或会话超时为止.以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用.
我以为我理解了这一点,但我在我的应用程序中遇到了异常行为,其中有一个TempData值可用且它不应该可用.通常,我有一个控制器,其中包含一系列操作,其中第一个操作设置一个TempData值,接下来的几个操作读取然后设置该TempData值,最后一个操作读取TempData值.下面的伪代码......
[HttpPost]
public ActionResult Step1()
{
TempData["bar"] = foo;
return RedirectToAction("Step2");
}
public ActionResult Step2()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return View();
}
[HttpPost]
public ActionResult Step2()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return RedirectToAction("Step3");
}
public ActionResult Step3()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return View();
}
[HttpPost]
public ActionResult Step3()
{
var foo = TempData["bar"]; …Run Code Online (Sandbox Code Playgroud) 我正在努力为我现有的.NET应用程序添加WCF服务层.该层将托管在IIS中,并将被各种UI使用,其中至少有一个不使用Microsoft技术.
我可以在我的.NET应用程序使用的WCF中创建Web服务.但是,我担心在.NET世界中有效的东西,而不是其他技术.
例如,简单地从我的WCF服务中抛出异常在.NET中运行良好.但是根据这篇文章,人们应该使用错误契约处理异常处理,以确保与非.NET使用者的兼容性.作者将这种缺乏远见称为"仅限世界的谬误".
有没有人有任何高级别的建议或链接到涵盖WCF和非.NET消费者之间的互操作性的文章?
我意识到我可能正在反对YAGNI原则.我非常希望避免以后非.NET消费者的开发人员向我报告问题时难以克服的事情.
我目前正在使用Ninject在WCF服务应用程序中创建接口实例.
Bind<IObjA>().To<ObjA>().InRequestScope();
Bind<IObjB>().To<ObjB>().InRequestScope();
Bind<IObjC>().To<ObjC>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但我们将有几个IObjC的实现.我有什么选择可以继续将实现流体分配给IObjA/IObjB的接口,但是允许IObjC的可配置分配?
我在SO上找到了一个相关的问题,但我不知道我是否可以同时支持流畅的和可配置的方法.
例如,我可以将Ninject.extensions.xml用于IObjC,同时继续对IObjA和IObjB使用上述方法吗?
是否建议为IObjC进行条件分配?这看起来很脏,但同时看起来很简单.
if (condition1)
Bind<IObjC>().To<ObjC1>().InRequestScope();
else if (condition 2)
Bind<IObjC>().To<ObjC2>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)
另外,我知道像Castle这样的其他框架支持XML配置,但我想继续使用Ninject.
我正在使用带有WCF扩展的Ninject 2.2.在我的大多数服务中,存储库都会快速实例化/释放.但是,我的一项服务执行长时间运行(2-3分钟).如果我观察w3wp进程,我可以看到使用SQL建立的TCP/IP连接,我可以在SQL上运行sp_who2并查看连接.
完成这些操作后,连接将保持打开状态5-10分钟.
当我多次运行该操作时,我没有看到生成新的连接但是我将运行该应用程序的多个实例,并且我发现之前的性能下降,同时发送了那些长时间运行的操作并且在几分钟后自行修复.
这个垃圾收集可以成为问题的一部分吗?如何解决?
这是我的Ninject绑定:
Bind<ISomeRepository>().To<SomeRepository>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)
这是我的WCF绑定:
<binding name="xxx" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
bypassProxyOnLocal="false" transactionFlow="false"
hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
maxReceivedMessageSize="99999999" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="false" allowCookies="false">
<readerQuotas maxDepth="90" maxStringContentLength="99999"
maxArrayLength="99999999" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="true" />
<security mode="..."/>
</binding>
<service name="SomeService"
behaviorConfiguration="abcd">
<endpoint name="BasicEndPoint" address="http://localhost/SomeService.svc"
binding="wsHttpBinding" bindingConfiguration="xxx"
contract="ISomeJobService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
Run Code Online (Sandbox Code Playgroud)
我意识到一个选择是将服务使用的存储库数量减少到一个,但我真的在寻找一个临时解决方案.
如今,JQuery是一个热门话题.今天,在Stack Overflow上,目前有8,470个问题与JQuery标签一起使其成为第10个最受欢迎的话题 - 就在那里使用SQL.
在选择要学习和掌握的新技能时,我想大多数开发人员都希望持续有用的东西.没有开发人员想要学习今天大肆宣传并且明天充满失望的事情.
我对Stack Overflow社区的问题是JQuery将如何影响未来几年的Web开发?
我知道在你的回答中会有一些主观的诱惑但我真的在寻找证据来证明JQuery不仅仅是炒作.作为一个例子,微软在Visual Studio 2008中添加了对JQuery的支持这一事实说明了很多.
其他相关信息可能包括使用JQuery的大公司数量,JQuery的职位发布数量,使用JQuery缩短开发时间的文章,自引入以来JQuery的稳定性等等.
因此,我有一个分层的ASP.NET MVC概念验证应用程序,可以很好地分离表示问题,业务逻辑和基础架构问题.现在它正在运行一个虚假的存储库(即针对静态IQueryable对象的LINQ查询).我想现在创建一个功能SQL存储库.
也就是说,我不想简单地将它绑定到一个在表和实体之间具有1-1映射的数据库中.这不符合我希望解决的业务需求(与现有数据库的部分集成 - 没有希望约定优于配置).
您对我应该考虑和/或避免的ORM /映射工具有什么建议吗?
您对我能看到的文章/书籍有什么建议可以帮助我解决这个问题吗?
在这种情况下简单地使用参数化查询会更好吗?
我已经看过很多例子(NerdDinner,Sanderson's Sports Store等),其中视图被绑定到一组对象.视图中的语法通常是这样的......
<%@ Page... Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyViewModel>>" %>
...
<% foreach (var myViewModel in Model) { %>
Run Code Online (Sandbox Code Playgroud)
我还看到了很多插入或更新的例子,其中控制器自动将模型参数绑定到视图中的表单元素.
我正在寻找这两种技术的混合,其中我的视图具有与myViewModel集合相关的元素,其中每个myViewModel具有3-4个属性.目的是允许用户一次性输入一组.
假设这是可能的,任何人都可以帮我解释语法吗?我无法弄清楚如何标记表单元素以使绑定工作.
我有两个相同类型的列表.该类型没有标识符或以编程方式区分的任何其他保证方式.
我希望A中不属于B的物品.
如果类型有标识符,我可以使用如下语句...
var result = listA
.Where(a => listB.Where(b => b.Id == a.Id).Count() == 0)
.ToList();
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能做到这一点的唯一方法是使用循环,我将每个项目添加到原始列表中不出现的次数.
foreach (var val in listB.Select(b => b.val).Distinct())
{
var countA = listA.Where(a => a.val == val).Count();
var countB = listB.Where(b => b.val == val).Count();
var item = listA.Where(a => a.val == val).FirstOrDefault();
for (int i=0; i<countA-countB; i++)
result.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
有没有更清洁的方法来实现这一目标?
编辑:这是列表中对象的简化版本.它来自一个正在击中另一个系统的Web服务.
public class myObject
{
public DateTime SomeDate { get; set; }
public decimal SomeNumber; { get; set; …Run Code Online (Sandbox Code Playgroud) 我一直在学习ASP.NET MVC大约一个月了,我肯定会出售它的好处,但我发现它并不适用于所有情况.
我在几个地方读到ASP.NET MVC不适合数据密集型应用程序:
有人可以澄清为什么ASP.NET MVC不适合数据量大的应用程序以及为什么Web表单更合适?另外,在数据繁重的应用程序和其他应用程序之间划清界线的位置在哪里?我们在谈论数据量(数百万条记录)还是在谈论大数据模型?
我一直在使用S#arp架构,但这可能适用于任何DDD架构(域/核心,应用服务,基础架构和演示).
有许多ASP.NET MVC示例显示控制器通过存储库接口在域模型上运行.事实上,S#arp架构教程的StaffMembersController引用了IStaffMemberRepository,它调用了FindAllMatching(在存储库中实现).StaffMember实体(也在域/核心层)看起来像一个数据包,其属性和属性的最小验证.
假设您的控制器变得臃肿,看起来像商业问题.在阅读Microsoft的"应用程序架构指南"中的Microsoft "设计业务实体"一章后,我认为这些问题可称为"域服务".
我想将这些域服务放在域/核心层,但我不确定它们应该去哪里.我应该在域/核心项目中创建一个服务文件夹,该文件夹承载带有其下面的实现文件夹的接口吗?这似乎是一个很好的方法,但我想看看别人如何处理这个问题.
谢谢!
architecture asp.net-mvc domain-driven-design repository s#arp-architecture
asp.net-mvc ×5
c# ×2
ninject ×2
repository ×2
wcf ×2
architecture ×1
binding ×1
button ×1
controller ×1
css ×1
html ×1
ienumerable ×1
jquery ×1
linq ×1
list ×1
oracle ×1
orm ×1
performance ×1
principal ×1
sql ×1
tempdata ×1
usability ×1
web-services ×1