我有一个HTTPHandler,只要请求captcha.ashx页面,就会向用户生成一个Captcha图像.它的代码很简单:
CaptchaHandler handler = new CaptchaHandler();
Random random = new Random();
string[] fonts = new string[4] { "Arial", "Verdana", "Georgia", "Century Schoolbook" };
string code = Guid.NewGuid().ToString().Substring(0, 5);
context.Session.Add("Captcha", code);
Bitmap imageFile = handler.GenerateImage(code, 100, 70, fonts[random.Next(0,4)]);
MemoryStream ms = new MemoryStream();
imageFile.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] buffer = ms.ToArray();
context.Response.ClearContent();
context.Response.ContentType = "image/png";
context.Response.BinaryWrite(buffer);
context.Response.Flush();
Run Code Online (Sandbox Code Playgroud)
然后在我的常规网站上,我得到以下内容:
...
<img id="securityCode" src="captcha.ashx" alt="" /><br />
<a href="javascript:void(0);" onclick="javascript:refreshCode();">Refresh</a>
...
Run Code Online (Sandbox Code Playgroud)
这非常有效,只要请求captcha.ashx页面,就会生成图像并将其发送回用户.我的问题是HTTPHandler没有保存会话?我试图从正常页面恢复会话,但我只有一个例外,说它不存在,所以我打开Trace看看哪些会话是活动的,它没有列出HTTPHandler创建的会话(验证码).
HTTPHandler使用IReadOnlySessionState与会话进行交互.HTTPHandler是否只具有读访问权限,因此不存储会话?
我得到一个编译错误,"无法隐式转换类型'System.Collections.ObjectModel.ObservableCollection到ProddataRecsObservable'.存在显式转换"请参阅以下代码段中的注释.
//I created a custom class called ProddataRecsObservable derived from
//ObservableCollection<Proddata> so I can do some special CRUD operations for my production
//data records.
public class ProddataRecsObservable : ObservableCollection<Proddata>
{
}
//I have another class which maps an object to a reader and the function MappAll returns an
//Observable collection of type <T>.
public abstract class MapperBase<T>
{
protected abstract T Map(IDataRecord record);
public ObservableCollection<T> Mapall(IDataReader reader)
{
ObservableCollection<T> collection = new ObservableCollection<T>();
while (reader.Read())
{
try
{
collection.Add(Map(reader));
} …
Run Code Online (Sandbox Code Playgroud) 我们开发了WCF服务,我们正在寻求部署它.我们的客户将使用它,basicHttpBinding
但我们的内部团队将使用它namedPipesBinding
.
我们想知道在IIS 7或Windows服务中托管它是否更好.我们运行了一些测试,我们发现当我们在IIS中添加绑定时,它不会更新我们服务的配置文件.这意味着我们需要在两个不同的地方维护配置.这不符合逻辑,对吗?
我们还在StackOverflow上读到当WCF服务是IIS中的主机时忽略基址(请参阅有关<baseAddresses>的WCF服务配置文件问题)
我正在尝试使用CAGradientLayers显示渐变.
我只是设置了两种颜色,我希望在它们之间看到一个渐变,不幸的是只显示第一个普通颜色而没有任何渐变.
这是我的代码:
- (void)viewDidLoad {
[super viewDidLoad];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(0.0, 0.0, 480.0, 320.0);
gradientLayer.colors = [NSArray arrayWithObjects:
(id)[UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0].CGColor,
(id)[UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1.0].CGColor,
nil];
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(480, 320);
[self.view.layer addSublayer:gradientLayer];
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
为什么必须在Java中初始化局部变量(包括基元)?为什么在实例变量的情况下不相同?
我有几个C#控制台应用程序,基本上解析内存中的大量数据(LINQ)并将结果输出到文本文件.
现在,忘记写入文本文件一分钟,因为这不是问题发生的地方.
当我在调试模式下运行应用程序时,我永远不会使用超过50%的CPU使用率.它将解析/按摩数十万条记录,但只能快速运行X并利用50%的CPU(在任务管理器中查看).
我真的想用100%的CPU来加快处理速度.
有人有任何见解吗?
我正在运行带有Service Pack 3的Windows XP Professional.我安装了带Service Pack 1的Visual Studio 2008 Professional.
谢谢!
编辑:
我的公司传统上使用Linux命令行开发环境.我们使用脚本来管理PATH
和LD_LIBRARY_PATH
编译和运行时的环境变量.通过将此脚本添加到命令的开头来调用此脚本,如下所示:
sbs make
sbs ../bin/foo.exe
Run Code Online (Sandbox Code Playgroud)
我试图让我们的代码从Eclipse CDT运行,并在开发工具中向前迈进十年左右.我可以在构建配置中控制make命令的内容,但我还没想出如何在运行配置中控制可执行命令.这样的事情可能吗?或者我们是否必须在运行配置中设置环境变量,而不是依赖脚本来执行此操作.该脚本的目的是在为不同版本的GTK构建或在不同平台(Linux,Solaris等等)上构建时最小化工作.
我一直觉得SecureString有点奇怪,但我认为我的大多数问题是由于我不明白的安全问题.今天我决定坐下来自学一下,但我已经看到了一个似乎是致命的障碍.
我设想的场景是"用户在文本框中输入密码,密码被哈希并与存储的哈希进行比较".起初我担心文本框包含字符串,但后来我意识到你可以滚动一个使用SecureString作为其存储的自定义文本框.凉.这是"密码被哈希并进行比较......"这一部分给了我麻烦.
我对VB .NET中的问题的第一次破解是天真和错误的:
Dim passwordHandle As IntPtr
Dim insecurePassword As String = Nothing
Try
passwordHandle = Marshal.SecureStringToBSTR(_password)
insecurePassword = Marshal.PtrToStringBSTR(passwordHandle)
Catch ex As Exception
Finally
If passwordHandle <> IntPtr.Zero Then
Marshal.ZeroFreeBSTR(passwordHandle)
End If
End Try
If insecurePassword <> Nothing Then
' Do hash and comparison
End If
Run Code Online (Sandbox Code Playgroud)
这只是将密码填入常规字符串中,并且首先违背了使用SecureString的目的.所以我一直在搜索并找到一篇博文,在C#中很好地解决了这个问题:将字符串制作成BSTR,复制到固定字符串中,然后BSTR和固定字符串在使用后都归零.这似乎是一个更好的主意,因为它最大限度地减少了不安全字符串在内存中的时间.但是,它似乎没有办法在VB .NET中实现这一点.C#正在使用其不安全的代码功能来执行指针操作,但VB .NET无法执行此操作.我看了一下Marhsall.Copy(),但它看起来像是面向数组.我想过尝试将对象的IntPtr变量和BSTR转换为字符串,但这仍然让我使用像String.Replace()这样的方法,它将创建一个新的字符串.
根本不可能从VB .NET做到这一点,还是有什么我想念的?
编辑 我接受AMissico的回答只有轻微的保留.Marshal.ReadByte()方法将从非托管内存中复制一个字节,并在非托管内存中创建一个字节.这使得攻击者很难找到密码的各个字符.我认为这远远低于找到整个字符串的几率,但我引用的(显然已经不存在的)文章中的C#能够使用不安全的代码来避免这种情况.思考过程是使用GCHandle将字符串固定在内存中,然后使用不安全的代码来绕过.NET字符串的不变性.聪明的技巧在VB .NET中似乎是不可能的.我会尝试使用C#代码本身.
我有以下C#代码.每当发现异常时(例如在第1行),我就永远无法到达其他行(2,3,4等).
try
{
line1
line2
...
}
catch (Exception ex)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在C#中,是否可以说如果第1行产生异常,只需继续其他行(2,3,4等)?
c# exception-handling visual-studio-2008 visual-studio c#-3.0