是否可以直接从web.config禁止某些用户代理?某些机器人似乎不遵循robots.txt,并且为了避免无意义的服务器负载(以及日志文件垃圾邮件),我想阻止某些类别的请求(特别是基于用户代理或非常可能是IP地址)继续进行.
如果您知道是否可以防止此类请求完全记录到IIS的日志文件中,则可以获得奖励积分.(即if-request-match,转发到/ dev/null,如果你明白我的意思).
win2003的解决方案更可取,但这是一个反复出现的问题 - 如果IIS7有一个干净的解决方案而不是IIS6,我很乐意知道它.
编辑: 抱歉'回合之前的不完整问题,我有标签+意外输入.
编辑:下面显示了两个选项.
如果您只是使用 IDisposable提供的功能,那么恰当命名的using子句可以正常工作.如果你在一个对象中包装一个IDisposable对象,那么包含对象本身就需要IDisposable,你需要实现适当的模式(密封IDisposable类,或者更混乱,但标准virtual模式).
但有时辅助工厂方法有利于清洁.如果你IDisposable在构造之后直接返回,你没问题,但是如果你先构造它然后修改它或者执行在返回之前可以抛出异常的代码,你需要安全地调用.Dispose()- 但是只有在出现错误时才需要.
例如,不安全的代码可能看起来像这样......
DbCommand CreateCommandUnsafely(string commandText)
{
var newCommand = connection.CreateCommand();
newCommand.CommandText = commandText; //what if this throws?
return newCommand;
}
Run Code Online (Sandbox Code Playgroud)
解决方案遵循以
DbCommand CreateCommandSafelyA(string commandText)
{
DbCommand newCommand = null;
bool success = false;
try {
newCommand = connection.CreateCommand();
newCommand.CommandText = commandText; //if this throws...
success=true;
return newCommand;
} finally{
if (!success …Run Code Online (Sandbox Code Playgroud) 我是构建基于ADO.NET的网站的团队的一员.我们有时会有几个开发人员和一个自动化测试工具同时处理数据库的开发副本.
我们使用快照隔离级别,据我所知,它使用乐观并发:而不是锁定,如果您尝试提交事务(如果受影响的行已被另一方更改),则希望获得最佳并抛出异常交易.
要使用快照隔离级别,我们使用:
ALTER DATABASE <database name>
SET ALLOW_SNAPSHOT_ISOLATION ON;
Run Code Online (Sandbox Code Playgroud)
在C#中:
Transaction = SqlConnection.BeginTransaction(IsolationLevel.Snapshot);
Run Code Online (Sandbox Code Playgroud)
请注意,IsolationLevel Snapshot与ReadCommitted Snapshot不同,我们也尝试过,但目前还没有使用.
当其中一个开发人员进入调试模式并暂停.NET应用程序时,他们将在调试时与活动事务保持连接.现在,我希望这不是一个问题 - 毕竟,所有事务都使用快照隔离级别,因此当一个事务暂停时,其他事务应该能够正常进行,因为暂停的事务没有持有任何锁.当然,当暂停的事务完成时,它可能会检测到冲突; 但只要其他开发人员和自动化测试可以不受阻碍地进行,这是可以接受的.
但是,实际上,当一个人在调试时暂停事务时,尽管使用了快照隔离级别,但所有其他尝试访问相同行的数据库用户都会被阻止.
有谁知道为什么会这样,和/或我如何才能实现真正的乐观(非阻塞)并发?
决议(对我来说不幸):Remus Rusanu指出作家总是阻止其他作家; 这是由MSDN支持的- 它并没有完全说出来,但只是提到避免读写器锁.简而言之,我想要的行为并没有在SQL Server中实现.
如果有人有类似的故事,请在下面发布详细信息!
我正在构建一个需要支持LDAP身份验证的ASP.NET网站.
在Windows上,LDAP auth可以通过Active Directory执行(我不是专家,但AD似乎只是ldap的特殊风格).我不控制AD和/或LDAP服务器.
我尝试了各种身份验证方法,但我已经决定使用单个DirectoryEntry身份验证尝试:
using (DirectoryEntry de = new DirectoryEntry(ldapPath, ldapUsername, password, AuthenticationTypes.ServerBind)) {
try {
// Bind to the native AdsObject to force authentication.
object obj = de.NativeObject;//not IDisposable
} catch(...
Run Code Online (Sandbox Code Playgroud)
检索NativeObject会导致出现COMException任何错误,例如,如果身份验证失败,则异常类似于"登录失败:未知用户名或密码错误",如果ldap服务器无法访问或超时,则类似"服务器无法运行."
这基本上是有效的,但是在变化的天数之后,总是从早上开始,我们得到"服务器无法运行".直到IIS重新启动.这显然不是一个很好的长期解决方案,但据我所知,错误在于DirectoryEntry下面的Com Object - 不是一件容易修复的东西.
这个 问题 不是 新的 或 未知的.有些人通过微软的支持得到了不同的结果; 基本上答案似乎归结为"采取你的ldap路径,并创建一些等效的替代品,也许其中一个将工作".每次尝试,或者当然,你几天都不知道它是否真的有效,并且在找到真正的解决方案之前,我们回到"每晚重启Windows服务器".
首先,我尝试了格式化的ldap路径
* "LDAP://server.uri:636"
* "LDAP://insecure.server.uri:389"
* "LDAP://server.uri:636/cn=username,ou=staff,o=myOrganisation,c=org"
Run Code Online (Sandbox Code Playgroud)
始终使用具有以下模式的用户名:
* "cn=username,ou=staff,o=myOrganisation,c=org"
Run Code Online (Sandbox Code Playgroud)
所有这些方法最初都有效,但在可变天数后失败(并在IIS重置后开始工作).服务器在win 2k3上运行IIS6.
如果其他人有这些问题,请在下面发布,也许最终我们会找到一个模式可以使用或有足够数量的例子来说服微软解决这个问题.
我一直在努力优化我的数字程序,并且遇到了一些神秘的问题.我循环执行数千个浮点运算的代码,其中1个调用pow- 然而,该调用占用了5%的时间......这不一定是关键问题,但它很奇怪,所以我想要了解发生了什么.
当我查找缓存未命中时,VS.NET 2010RC的分析器报告几乎所有缓存未命中都发生在std::pow......所以......那是什么?有更快的替代方案吗?我试过了powf,但那只是稍快一点; 它仍然是异常缓存未命中数的原因.
为什么像pow这样的基本功能会导致缓存未命中?
编辑:这不是托管代码. /Oi内在函数已启用,但编译器可以选择忽略它.更换pow(x,y)由exp(y*log(x))具有类似的性能-刚才所有的高速缓存未命中都在日志功能.
如果是这样,请解释如何.
Re:什么是距离 - "两个字符串之间的距离定义为将一个字符串转换为另一个字符串所需的最小编辑数."
例如,xyz到XYZ将进行3次编辑,因此字符串xYZ更接近XYZ和xyz.
如果模式是[0-9] {3}或例如123,那么a23将比ab3更接近模式.
如何找到正则表达式与非匹配字符串之间的最短距离?
以上是Damerau-Levenshtein距离算法.
在过去的几年里,我一直在混合模式的应用程序中使用WPF来显示各种各样的UI.C#程序集使用WPF生成UI - 它引用包含一些本机代码的C++/CLI构建的程序集.本机代码不会在少数printf之外调用OS; 这纯粹是计算机.
当附加调试器运行时,我看到关闭应用程序后,托管调试助手"RaceOnRCWCleanup"激活 - 表明存在一些带有多线程清理问题的COM组件.
我不是直接以任何方式使用COM,但可能是C++/CLI或WPF.关于应用程序关闭的警告并不是特别可怕 - 毕竟,应用程序仍在退出 - 但我很想知道出了什么问题.我能做些什么来避免这个警告吗?某个地方是否有一个隐藏的错误等着咬我,还是一个虚假的警告?
这是一个示例堆栈跟踪:
mscorlib.dll!System.Runtime.InteropServices.Marshal.ReleaseComObject(object o) Line 1826 + 0xc bytes C#
PresentationFramework.dll!System.Windows.Documents.TextServicesHost.DeactivateThreadManager() Line 465 + 0xd bytes C#
PresentationFramework.dll!System.Windows.Documents.TextServicesHost.OnUnregisterTextStore(object arg) Line 331 C#
PresentationFramework.dll!System.Windows.Documents.TextEditor.DetachTextStore(bool finalizer) Line 249 + 0x6b bytes C#
WindowsBase.dll!System.Windows.Threading.Dispatcher.ShutdownImplInSecurityContext(object state) Line 1363 + 0xfffffffc bytes C#
mscorlib.dll!System.Threading.ExecutionContext.runTryCode(object userData) Line 484 + 0xce bytes C#
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过同样的问题?有人知道发生了什么吗?
即,标准库中有这样的函数吗?
let ret x _ = x
Run Code Online (Sandbox Code Playgroud)
为了保持代码的可读性,我想尽量减少自制基本构建功能构建块的数量,并使用现有的东西。
我经常想要将css盒在垂直和水平方向中心放在另一个中心.满足以下约束条件的最简单方法是什么?
我目前使用4(!)嵌套的div来实现这一点,css沿着以下几行:
.centering-1 {
position:absolute;
top:0; left:0; right:0; bottom:0;
text-align:center;
visibility:hidden;
}
.centering-2 {
height:100%;
display:inline-table;
}
.centering-3 {
display:table-cell;
vertical-align:middle;
}
.centering-content {
visibility:visible;
}
Run Code Online (Sandbox Code Playgroud)
您可以将其视为jsbin片段.然而,这种方法虽然可行,但由于包装div的数量很多而感觉极端矫枉过正,并且它不适用于比容器大的内容.如何在CSS中居中?
我正在使用boost mt19937实现进行模拟.
模拟需要是可重复的,这意味着以后存储并可能重复使用RNG种子.我正在使用windows crypto api生成种子值,因为我需要种子的外部源,而不是因为任何特殊的随机性保证.任何模拟运行的输出都会有一个包含RNG种子的注释 - 因此种子需要相当短.另一方面,作为模拟分析的一部分,我将比较几次运行 - 但为了确保这些运行实际上是不同的,我需要使用不同的种子 - 所以种子需要足够长避免意外碰撞.
我已经确定64位播种应该足够了; 在大约2 ^ 32次运行后,碰撞的几率将达到50% - 这个概率足够低,以至于它造成的平均误差对我来说可以忽略不计.仅使用32位种子很棘手; 在2 ^ 16次运行后,碰撞的可能性已达到50%; 这对我的口味来说有点太可能了.
不幸的是,增强实现要么是带有完整状态向量的种子 - 这太长,太长 - 或者是一个32位无符号长 - 这并不理想.
如何为超过32位但小于满状态向量的发生器播种?我试着填充矢量或重复种子来填充状态向量,但即使粗略地看一下结果也会显示结果不佳.