Tag: .net

如何使用dependency injection的属性?

在我创build的MVC项目中,我有以下RequirePermissionAttribute ,它被放在需要特定权限的任何操作上(这个例子已经简化了): public class RequirePermissionAttribute : ActionFilterAttribute, IAuthorizationFilter { public Operation Permissions { get; set; } public RequirePermissionAttribute() { } public RequirePermissionAttribute(Operation permissions) { this.Permissions = permissions; } public bool AuthorizeCore(HttpContextBase httpContext) { IAuthorizationService authServ = new ASPNETAuthorizationService(); return authServ.Authorize(httpContext); } public void OnAuthorization(AuthorizationContext filterContext) { Enforce.ArgNotNull(filterContext); if (this.AuthorizeCore(filterContext.HttpContext)) { // code snipped. } else […]

.Net 4 MemoryCache泄漏并发垃圾收集

我在.Net 4中使用了新的MemoryCache ,最大高速caching大小限制为MB(我testing了它在10到200MB之间,在1.75到8GB内存的系统上)。 我不会在对象上设置任何基于时间的过期,因为我只是将高速caching用作高性能驱动器,只要存在空间,我希望使用它。 令我惊讶的是,caching拒绝驱逐任何对象,以至于我会得到SystemOutOfMemoryexception 。 我启动了perfmon ,将我的应用程序连接到.Net CLR Memory\#Bytes In All Heaps , .Net Memory Cache 4.0和Process\Private Bytes – 实际上,内存消耗已经失控,没有caching修剪注册。 做了一些谷歌search和stackoverflowing ,下载和附加CLRProfiler ,和wham :到处驱逐! 内存保持在合理的范围内,根据我设定的内存大小限制。 在debugging模式下再次运行,不会驱逐。 CLRProfiler再次驱逐。 我终于注意到,探查器强制应用程序运行,没有并发垃圾收集 (也见有用的SO并发垃圾收集问题 )。 我在我的app.config中closures了它,果然,驱逐! 这似乎充其量只是一个荒谬的缺乏文档不说: 这只适用于非并发垃圾收集 – 虽然我的形象,因为它从ASP.NET移植,他们可能不必担心并发垃圾收集 。 那么有没有其他人看到这个? 我很想在那里得到一些其他的经验,也许还有一些更有教养的见解。 更新1 我已经在一个单一的方法中重现了这个问题:看起来caching必须并行写入caching驱逐不能触发(在并发垃圾收集模式下)。 如果有兴趣的话,我会把testing代码上传到公开的回购站。 我肯定正在进入CLR / GC / MemoryCache池的深层,我想我忘了我的floaties … 更新2 我在CodePlex上发布了testing代码来重现这个问题。 此外,可能有趣的是,原始生产代码作为工作者angular色在Azure中运行。 有趣的是,更改angular色的app.config中的GC并发设置没有任何作用。 可能Azure重写GC设置很像ASP.NET? 此外,在WPF和控制台应用程序下运行testing代码将产生稍微不同的驱逐结果。

将所有警告视为错误

这应该是显而易见的,但我不能使其工作… 我想要做的事情很简单: 如果出现警告,我希望我的编译失败并显示错误 。 是的,着名的TreatWarningsAsErrors … 我configuration它在我的C#项目属性 这导致在我的csproj例外TreatWarningsAsErrors部分: <TreatWarningsAsErrors>true</TreatWarningsAsErrors> 到目前为止,如果我在代码中添加一个无用的privatevariables,会导致编译错误: private int unused; 错误3警告错误:字段'XXXX.unused'从不使用 但是,整个问题是,我不能使它适用于程序集引用问题 。 如果我有一个未知程序集的引用,编译器(devenv或msbuild)会引发警告,但是我想要一个错误。 最终,我试图configuration一个门控登记TFS生成configuration,所以TFS将拒绝提交,以防万一有一个“ 被引用的组件'XXXX'找不到 ”警告。 比修改构build过程模板更简单的事情会很好。

Selenium WebDriver偶尔抛出Timeoutexception

在我们的项目中使用selenium进行UItesting。 我们正在运行最新的版本2.30.0。 我们使用Firefox WebDriver并运行Firefox 19.0。 一般来说,当我在Visual Studio中运行uitesting时,uitesting在本地甚至服务器端工作。 我们的uitesting在我们的构build服务器上执行得很快。 它使用相同的部署在我通过Visual Studio手动testing的同一台服务器上。 但是当uitesting在buildserver上执行时偶尔遇到以下问题: Test(s) failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:7056/hub/session/bed1d0e7-efdc-46b6-ba07-34903519c44d/element/%7B8717bb19-96c7-44d3-b0ee-d4b989ae652d%7D/click timed out after 60 seconds. —-> System.Net.WebException : The operation has timed out at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request) at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) –WebException at System.Net.HttpWebRequest.GetResponse() at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request) 基本上,testing点击一个上传button,其中input字段之前填充了一个文件。 由于该文件非常小,因此可以在几秒钟内完成。 […]

格式化LINQ查询的最佳方法

在你忽略/投票结束这个问题之前,我认为这是一个有效的问题,因为代码清晰性是讨论的一个重要话题,所以编写可维护的代码是非常重要的,我非常感谢那些曾经遇到过。 我最近遇到了这个问题,因为大量的嵌套,LINQ查询可以非常快速地实现。 下面是我所想到的格式差异的一些例子(对于相同的非复杂的查询) 没有格式化 var allInventory = system.InventorySources.Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }).GroupBy(i => i.Region, i => i.Inventory); 格式boost var allInventory = system.InventorySources .Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }) .GroupBy( i => i.Region, i => i.Inventory); 块格式化 var allInventory = system.InventorySources .Select( src […]

用户/通过使用RESTful WCF和Windows窗体的身份validation

为Windows Forms应用程序与IIS托pipe的RESTful WCF服务交谈实施授权/身份validation的最佳方法是什么? 我问的原因是我很困惑,筛选了不同的文章和职位expression不同的方法,并最终在WCF安全最佳实践“( http://www.codeplex.com/WCFSecurityGuide )上达到约650页的文档我是根据我的情况,只是不确定哪种方法是最好的,以及如何开始实施。 我从本文开始使用“使用WCF 3.5devise和构buildREST风格的Web服务”( http://msdn.microsoft.com/zh-cn/library/dd203052.aspx )以及REST风格的WCF服务上的PDCvideo。很棒,帮助我实现了我的第一个REST友好的WCF服务, 我有了服务工作后,我回到了实施安全,见。 “安全注意事项”(页面上的四分之一),并试图按照说明实现一个HTTP授权标头,但是我发现代码是不完整的(请参阅UserKeysvariables从未声明)。 这是我试图研究更多关于如何做到这一点(使用HMAC哈希与“授权”HTTP标头,但在谷歌上找不到多less?),这导致我到其他文章有关消息级别的安全性,形成authentication和自定义validation器,坦率地说,我不确定哪个是现在采取的最好和最合适的方法。 所以所有这些(并感谢听到直到现在!),我想我的主要问题是, – 我应该使用哪种安全实施? – 有没有办法避免每个WCF调用发送用户名/密码? 如果在开始时已经build立了一个连接,我宁愿不发送这些额外的字节,这将在login之后允许进行后续的呼叫。 – 如果我使用SSL,是否真的应该关心纯文本? 如上所述,.NET 3.5 win表单应用程序,IIS托pipe的WCF服务,但是重要的是我希望任何和所有的WCF服务都需要这个授权过程(不过它应该是会话,http头或其他),因为我不希望任何人都能够从networking上获得这些服务。 我知道上面的post很大,但我不得不expression我已经倒闭的路线,我需要完成的任何和所有的帮助,我非常感激。 PS:我也知道这篇文章如何使用WCF使用用户名/密码+ SSLconfiguration安全的REST风格的服务,如果社区build议我离开REST的WCF服务,我可以做到这一点,但是我开始保持一致任何公共的API来。 我认为这是很重要的,我说我如何访问我的WCF服务(联系服务正在工作,但什么是validation凭据 – 然后返回成员对象的最佳方式? WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>( new Uri(Properties.Settings.Default.MemberServiceEndpoint)); IMemberService channel = cf.CreateChannel(); Member m = channel.GetMember("user", "pass"); 从MS文章(和我自己的一些testing)实施的一半代码: public Member GetMember(string username, string password) { if […]

在ASP.NET MVC 4中使用自定义数据库模式的SimpleMembership

我想启用ASP.NET MVC 4的SimpleMembership API来与我自己的数据库模式集成。 我在我的数据库中有一个普通而简单的表,名为Users ,这些字段是: ID 名称 密码 电子邮件 请将isDeleted 我已经configuration了SimpleMembership API来使用我的数据库: WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: true); 我也可以插入一个用户: WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { IsDeleted = false, Email = "sampledata@gmail.com" }); 然而,密码字段(或它的散列)没有插入Users表(当然),它插入到另一个名为webpages_Membership表中,该表使用InitializeDatabaseConnection调用创build,并包含大量不需要的信息。 此外,我有其他自动创build的表,称为webpages_OAuthMembership,webpages_Roles和webpages_UsersInRoles我不需要。 我已经尝试将表生成设置为false: WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: false); 但在这种情况下,CreateUserAndAccount调用将抛出一个exception,因为它不会findwebpages_Membership表。 它看起来像我想要使用SimpleMembership API时所需的这些表。 我的问题是:当我只想要一个简单的Users表,而不需要什么时,我应该怎么做呢? 我必须自己编写整个成员资格处理和authentication逻辑(散列码生成等)吗?

什么是一个好的,如果有的话,.NET Windows自动化库?

我正在寻找一个可以在本地.NET代码中使用的库,就像任何.NET程序集一样。 库的目的必须是使Windows自动化(按下button,select窗口,发送按键,录制和回放等等)。 所以:图书馆本来应该在.NET中使用,但是自动化本身必须能够定位任何可以接收用户input的本机或.NET Windows应用程序。 迄今为止的build议: benPearcebuild议AutoIt 。 它有一个DLL,它是本地的Win32,但不是本地.NET,不能使用.NET Interop。 Chris Dunawaybuild议全球鼠标键盘库 。 这是最接近的,但不是一个自动化库。 它只是帮助设置键盘和鼠标钩子。 pm100build议微软的WPF UI自动化 。 这一个是相当不错的,虽然它不是可用的,如果你在.NET 2.0中开发,它需要在系统上安装WPF。 但是,它可以在浏览器中自动执行从Win32应用程序到HTML的所有function。 JasonTrue从ArtOfTestbuild议WebAI 。 这是一个主要面向浏览器和Web应用程序的testing框架。 不幸的是,它不适合用于Windows自动化。 如果没有其他可用的东西,我可能会select微软的UI自动化,如果可能的话,升级任何需要.NET 2.0到.NET 3.5的项目。 但我希望有一个更广泛适用的自动化框架(2.0以前的.NET不需要支持)。

获取Windows用户名 – 不同的方法

在.NET中,似乎有几种获取当前Windows用户名的方法。 其中三个是: string name = WindowsIdentity.GetCurrent().Name; 要么 string name = Thread.CurrentPrincipal.Identity.Name; 要么 string name = Environment.UserName; 有什么区别,为什么select一种方法呢? 还有其他的方法吗?

控制器在单独的组装和路由

在相同的解决scheme中,有一个ASP.NET MVC4应用程序Slick.App和类库Awesome.Mvc.Lib 。 Awesome.Mvc.Lib包含一个控制器类。 public class ShinnyController : Controller { [HttpGet] public string Index() { return "Hello, from Awesome.Mvc.Lib"; } } 如果我只是将Slick.App的引用添加到Awesome.Mvc.Lib,运行应用程序并将浏览器指向/shinny shinny,实际上我会看到响应“Hello,from Awesome.Mvc.Lib”。 这是我所不希望的。 我一直认为ASP.NET MVC尊重控制器所在的命名空间。所以,来自其他命名空间的控制器不会暴露,至less在我没有要求之前。 我试图改变默认的路由注册,使用namespaces参数。 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new [] { "Slick.App.Controllers" } ); 不过,ShinnyController路线仍然匹配'/ shinny'。 […]