我正在尝试将一些安全性/验证日志记录添加到我正在处理的ASP.NET MVC 3应用程序中.我想做的是使用类似于此的Action过滤器来装饰我的一些Action方法:
public class RegexValidateAttribute : ActionFilterAttribute
{
private static readonly ILog logger =
LogManager.GetLogger( typeof( RegexValidateAttribute ).FullName );
public string ParameterName { get; set; }
public string Expression { get; set; }
public override void OnActionExecuting( ActionExecutingContext filterContext )
{
string parameterValue = Convert.ToString(
filterContext.ActionParameters[ ParameterName ] );
if ( parameterValue != null )
{
if ( !Regex.IsMatch( parameterValue, Expression ) )
{
logger.Error( "INPUT_VALIDATION_EXCEPTION [ Parameter "
+ ParameterName + " did not match the regex: '" …Run Code Online (Sandbox Code Playgroud) 我正在使用Windows Azure Management API来扩展我的Azure Web角色.在某些时候,我有一个实例,并决定我想从一个实例转到两个实例.我发送HTTP POSt请求
https://management.core.windows.net:443/<my-subscription-id>/services/hostedservices/<my-service-name>/deployments/<my-deployment-name>/?comp=config
Run Code Online (Sandbox Code Playgroud)
使用XML指定与当前部署相同的配置,并将实例计数设置为2.呼叫成功,更改开始.现在大约30秒,Web角色将不接受HTTP调用 - 调用者将获得
10061 connection refused
Run Code Online (Sandbox Code Playgroud)
在浏览器中.这意味着该角色不会为客户端请求提供服务.那是个问题.
如何以始终为客户端请求提供服务的方式扩展Web角色?
我有这个代码:
class SomeClass {
void someFunction()
{
Action<string> myAction = (what)=>
{
//whatever
}
new List<string>().ForEach(myAction);
}
}
Run Code Online (Sandbox Code Playgroud)
我想将代码内部提取myAction到一个单独的成员函数中.
我怎么做?
假设我有一个模板函数,用于处理指向未知类型的指针T。现在,如果类型T碰巧void*在 64 位平台上,那么它必须是 8 字节对齐,但如果T碰巧是,char它必须是 1 字节对齐,如果T碰巧是一个类,那么它的对齐要求将取决于其成员变量。
这一切都可以在纸上计算,但如何使编译器产生给定类型的对齐要求T?
有没有办法在编译时找到给定类型的对齐要求?
这可能是简单而愚蠢的,但无论如何我会问它,因为我似乎无法弄明白.
一个简单的代码片段:
assume cs:code, ds:data
data segment
b dd 256
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,word ptr b -> the result of this operation will be ax:= 256 (100h)
mov bx,word ptr b+1 -> while this is going to be bx:= 1
Run Code Online (Sandbox Code Playgroud)
我想它与地址有关,它被一个字节或其他东西移动但我不完全确定,我真的需要理解.
提前致谢 !
在我的C#代码中,我希望能够记录COMExceptions,以便不仅输出HRESULTs的十六进制表示形式(例如0x80004005),而且输出相应的WinError.h定义符号(例如E_FAIL)。
如果我调用ToString()异常引用,则只有十六进制表示形式。
是否有一种内置方法来获取对象内部值的类似E_FAIL人类可读的常量?HRESULTCOMException
Windows API具有ChildWindowFromPoint()和ChildWindowFromPointEx()功能,它们的不同之处在于后者具有指定要跳过哪些窗口的uFlags参数.
看起来如果我CWP_ALL进入,ChildWindowFromPointEx()我会得到与我一样的效果ChildWindowFromPoint().
uFlags参数的唯一区别是什么?我可以ChildWindowFromPointEx()随处使用并CWP_ALL在需要ChildWindowFromPoint()行为时通过吗?
早期版本的Azure SDK具有CloudBlob.CopyFromBlob()同步性,我们在代码中使用它们.我们现在需要转移到SDK 2.4并且那里没有这样的方法,而是CloudBlockBlob.StartCopyFromBlob()返回一些魔术令牌,我们可以使用它来检查副本是如何完成的.
在我们的代码中"blob"的"背景"复制是没有意义的 - 同步执行复制会很好,所以以某种方式CopyFromBlob()使用较新的SDK中的东西实现等效的旧版本会很好.
这是我的方法:
CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(sourcePath);
CloudBlockBlob targetBlob = targetContainer.GetBlockBlobReference(targetPath);
var copyToken = targetBlob.StartCopyFromBlob(sourceBlob.Uri);
while( true ) {
System.Threading.Thread.Sleep(100);
CloudBlockBlob target = targetContainer.GetBlockBlobReference(targetPath);
bool greatSuccess = false;
switch( target.CopyState.Status ) {
case CopyStatus.Success:
greatSuccess = true;
break;
case CopyStatus.Pending:
continue;
default:
throw new Exception( "Failed to copy" );
}
if( success ) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来很有效,但我不确定那里没有潜在的问题.
什么是惯用的方式使用StartCopyFromBlob(),然后等待复制完成?
我正在审查Visual Studio 2012中某些程序的反汇编,并看到以下内容:
65F920F3 or eax, 0FFFFFFFFh
65F920F6 jmp 65F92157
Run Code Online (Sandbox Code Playgroud)
请注意or.它占用地址F3-F5,这意味着它只占用三个字节.该eax寄存器是四个字节,所以我假定不变0FFFFFFFFh也是四个字节.
该指令如何适合三个字节?
这个问题基本上是我们GC.KeepAlive()首先需要的原因.
这就是我们需要它的地方.我们有一些非托管资源的包装器
public class CoolWrapper
{
public CoolWrapper()
{
coolResourceHandle = UnmanagedWinApiCode.CreateCoolResource();
if (coolResourceHandle == IntPtr.Zero)
{
// something went wrong, throw exception
}
}
~CoolWrapper()
{
UnmanagedWinApiCode.DestroyCoolResource(coolResource);
}
public void DoSomething()
{
var result = UnmanagedWinApiCode.DoSomething(coolResource);
if (result == 0)
{
// something went wrong, throw exception
}
}
private IntPtr coolResourceHandle;
}
Run Code Online (Sandbox Code Playgroud)
我们的代码使用该包装器:
var wrapper = CoolWrapper();
wrapper.DoSomething();
Run Code Online (Sandbox Code Playgroud)
如果此代码在Release配置中运行而不是在调试器下运行,那么代码优化器可能会发现在此代码之后实际上没有使用该引用coolResourceHandle,并且在读取内部后该成员变量未被访问(通过托管代码)DoSomething()并将其值传递给非托管代码,因此会发生以下情况:
DoSomething() 叫做coolResourceHandle 被读了~CoolWrapper() 运行UnmanagedWinApiCode.DestroyCoolResource() 运行并且资源被破坏,资源句柄无效UnmanagedWinApiCode.DoSomething() 使用现在引用不存在的对象的值运行(或者可能创建另一个对象并分配该句柄) ….net ×4
c# ×4
assembly ×2
windows ×2
x86 ×2
alignment ×1
api ×1
azure ×1
c++ ×1
com ×1
com-interop ×1
disassembly ×1
error-code ×1
lambda ×1
linq ×1
visual-c++ ×1
winapi ×1
x86-16 ×1