如何从当前文件夹中获取文件?
我有一个名为sql_parser.rb包含类的文件.我想将它包含在同一个文件夹中的另一个文件中,所以我使用了:
require 'sql_parser'
Run Code Online (Sandbox Code Playgroud)
当我从该文件夹运行时失败:
LoadError: no such file to load -- sql_parser
Run Code Online (Sandbox Code Playgroud)
我尝试在存在此文件的文件夹中使用IRB并从那里要求它,但是遇到了同样的问题.
我正在使用ASP.NET MVC 3,使用表单身份验证(基于使用file-> new获得的修改后的vanilla帐户代码).
当您登录时,我正在设置一个身份验证cookie
FormsAuthentication.SetAuthCookie(userName, true);
Run Code Online (Sandbox Code Playgroud)
所以这应该设置一个持久的cookie.但是,如果我关闭浏览器并重新打开,当我浏览到该网站时,我被迫再次登录!我可以看到使用chrome dev工具创建cookie(.ASPXAUTH)并在关闭浏览器时不被删除,所以发生了什么?
我的web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogIn" timeout="10000"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)
我正在IIS下本地测试这个,如果这有任何区别的话.
我正在使用BitFactory日志记录,它暴露了一堆这样的方法:
public void LogWarning(object aCategory, object anObject)
Run Code Online (Sandbox Code Playgroud)
我有一个扩展方法,使我们的日志记录需求更好一些:
public static void LogWarning(this CompositeLogger logger,
string message = "", params object[] parameters)
Run Code Online (Sandbox Code Playgroud)
这只是包装了一些常见的日志记录操作,这意味着我可以记录如下:
Logging.LogWarning("Something bad happened to the {0}. Id was {1}",foo,bar);
但是当我只有一个字符串时params object[],我的扩展方法将不会被调用,而是选择原始方法.
除了命名我的方法之外,有没有办法阻止这种情况发生?
使用Watin,我正在尝试处理确认对话框并告诉watin按"OK".这在互联网上有很好的记录 - 你使用ConfirmDialogHandler和UseDialogOnce方法..除了它不适合我.我收到以下错误:
WatiN.Core.Exceptions.WatiNException: Dialog not available within 5 seconds
我正在使用watin 2.0 beta atm,但我之前使用的是早期版本的1.X,它有同样的问题.在运行64位Vista的同事机器上测试,我正在运行64位Windows 7.
代码如下所示:
using (IE ie = new IE("http://localhost/TestApp/TestConfirmPage.asp"))
{
var approveConfirmDialog = new ConfirmDialogHandler();
using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
{
ie.Button(Find.ByName("btn")).ClickNoWait();
approveConfirmDialog.WaitUntilExists(5);
approveConfirmDialog.OKButton.Click();
}
ie.WaitForComplete();
}
Run Code Online (Sandbox Code Playgroud)
ASP页面非常简单,它包含一个强制确认的按钮,如下所示:
<input type="button" name="btn" id="btn" value="Click me" onclick="ConfirmApp()" />
Run Code Online (Sandbox Code Playgroud)
并且ConfirmApp已被剥离进行测试,以便现在它包含的是:
bOK = confirm("You clicked a popup. Did you mean to?");
return bOK;
Run Code Online (Sandbox Code Playgroud) 我有一个队列,其上放置了待处理的傅立叶变换请求(相对耗时的操作) - 在某些情况下,我们每秒可以获得数千个变换请求,因此它必须快速.
我正在升级旧代码以使用.net 4,以及移植到TPL.我想知道处理这个队列的最有效(最快的吞吐量)方式是什么样的.我想使用所有可用的核心.
目前我正在尝试使用BlockingCollection.我创建了一个队列处理程序类,它产生4个任务,阻塞BlockingCollection并等待传入的工作.然后他们处理挂起的转换.码:
public class IncomingPacketQueue : IDisposable
{
BlockingCollection<IncomingPacket> _packetQ = new BlockingCollection<IncomingPacket>();
public IncomingPacketQueue(int workerCount)
{
for (int i = 0; i < workerCount; i++)
{
Task.Factory.StartNew(Consume);
}
}
public void EnqueueSweep(IncomingPacket incoming)
{
_packetQ.Add(incoming);
}
private void Consume()
{
foreach (var sweep in _packetQ.GetConsumingEnumerable())
{
//do stuff
var worker = new IfftWorker();
Trace.WriteLine(" Thread {0} picking up a pending ifft".With(Thread.CurrentThread.ManagedThreadId));
worker.DoIfft(sweep);
}
}
public int QueueCount
{
get
{
return _packetQ.Count;
}
}
#region …Run Code Online (Sandbox Code Playgroud) 使用当前请求,我可以获取URL主机名:
HttpContext.Current.Request.Url.Host
Run Code Online (Sandbox Code Playgroud)
但是 - 我需要在不使用当前请求(HttpContext.Current)的情况下确定URL主机名.这样做的原因是我的代码是SqlDependency在onChange回调中从a 中调用的,当时发现了SQL依赖关系.虽然代码驻留在我的Web应用程序中,但没有请求,并且HttpContext.Current为null.
我希望我可以抓住它HttpRuntime,但似乎没有什么用处.有没有办法可以获得这些信息?
我需要在我的Web应用程序中添加一个"实时"元素.基本上,我需要检测存储在SQL Server表中的"更改",并在发生更改时更新UI的各个部分.
我目前通过民意调查这样做.我每隔3秒向服务器发送一个ajax请求,要求进行任何新的更改 - 然后返回并处理这些更改.它有效,但我不喜欢它 - 这意味着对于每个浏览器,我将经常发出这些请求,并且服务器将始终忙于处理它们.简而言之,它不能很好地扩展.
是否有任何聪明的替代方案可以避免轮询开销?
编辑
为了完整性,我正在更新这个,以提及我们最终使用的解决方案 - SignalR.它的操作系统来自微软.它越来越受欢迎,我可以衷心地推荐这个,或者我们也看过的WebSync.
我刚刚为迁移良好安装了EF 4.3-beta1,我无法让它工作.我得到的错误:
PM> Update-Database -Verbose
Using NuGet project 'Project.Domain'.
Using StartUp project 'ProjectWebSite'.
System.InvalidOperationException: No migrations configuration type was found in the assembly 'Project.Domain'.
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
No migrations configuration type was found in the assembly 'Project.Domain'.
Run Code Online (Sandbox Code Playgroud)
我在2个EF类中添加了一个新列:
public class MasterInstance
{
public int MasterInstanceId { get; set; }
[Required] public string HostName { get; set; }
[Required] public string Name { get; set; } /* <-- THIS IS NEW */
[Required] public string ConnectionString …Run Code Online (Sandbox Code Playgroud) 我有一个天蓝色的webjob,它有api键等的一些appsettings.
我还有一堆PRODUCTION azure应用程序设置(在门户网站中指定),应该覆盖我的webjob配置appsettings ..但他们没有.
对于我的网站,他们按预期工作,一切都很好.但是对于webjobs,它们只是被完全忽略,而是使用配置中的应用程序设置.
这是天蓝色的错误吗?所有文档都表明这应该有效.
编辑
我发现这个博客都是关于使用CloudConfigurationManager.GetSetting所以我已经实现了它仍然无法工作 - 仍然使用web作业的应用程序设置文件中定义的设置:(
谢谢
像slack这样的移动应用程序已经普及了允许用户获得一次性登录链接的想法(Slack将其称为魔术登录链接).
您的想法是输入电子邮件,而不必输入移动密码,您需要一个魔术登录链接,可以通过打开手机上的链接一次登录.
我在asp.net identity 2.1中实现这个,我不确定如何确保生成的链接只能使用一次.
我生成一个这样的标记:
var token = await _userManager.GenerateUserTokenAsync("MyLoginLink",user.Id);
Run Code Online (Sandbox Code Playgroud)
此令牌将添加到用户的URL中.链接重定向到的操作方法检查链接是否对该用户有效,然后将您登录到:
public async Task<ActionResult> LoginLink(string email, string token)
{
var user = await _userManager.FindByNameAsync(email);
// some checks ommited
//check for an expired token:
var result = await _userManager.VerifyUserTokenAsync(user.Id, "MyLoginLink", token);
if (!result)
{
// Failed
return RedirectToAction("Login");
}
await _userManager.UpdateSecurityStampAsync(user.Id);
await SignInAsync(user, true);
Run Code Online (Sandbox Code Playgroud)
现在 - 如果我更新安全标记user.UpdateSecurityStamp,重新生成安全标记,这将使此标记无效,并确保它不能再次使用.问题在于它还会使任何现有登录失效,因此如果用户也登录到桌面,则会强制他们再次注销.
是否有一种相对简单的方法在asp.net身份中创建这样的一次性使用令牌,这不会使所有现有登录失效?