我已经使用RavenDB 成功实现了推送通知(参见下面的代码).我期待实际文档包含在更改通知中.这样,所有UI客户端都可以显示信息.但是,似乎只有Id和Etag属性可用于更改的文档.
如果我希望客户端能够显示有关文档的信息,我该怎么办?客户端现在是否需要进行数据库调用以根据ID获取文档?必须进行数据库调用以获取信息似乎效率低下.但是,应该发生什么?
documentStore.Changes()
.ForDocumentsStartingWith("LogMessages")
.Subscribe(change =>
{
if (change.Type == DocumentChangeTypes.Put)
{
// Fire event so consumers can display document info
// Uh oh, are change.Id and change.Etag all we have here?
DatabaseItemAdded(null, new EventArgs<string>(change.Id));
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个业务逻辑方法,必须先完成才能再次调用.多个客户端可以立即调用它:
public void DoSomething() {}
Run Code Online (Sandbox Code Playgroud)
我正在考虑通过将方法设为私有来解决它,并创建一个新的公共方法来将请求放在队列中:
public void QueueSomeWork()
{
// put on a Queue object
// How will DoSomething get invoked now?
}
private void DoSomething() {}
Run Code Online (Sandbox Code Playgroud)
我试图以优雅的方式解决这个问题.我的问题是如何DoSomething()知道运行.我想过创建一个计时器来检查队列,但是它会全天候运行,因为每年可能发生两次.
另一个想法是,DoSomething()当它完成了其他人会订阅的东西,从队列中选择一些工作并打电话时触发事件DoSomething().有没有更好的办法?
我按照博客文章,只需两步即可运行脚本.基本上,我这样做了:
@powershell -NoProfile -ExecutionPolicy Unrestricted -Command "iex ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
Run Code Online (Sandbox Code Playgroud)
这样做时我得到一个错误:
cinst scriptcs
Run Code Online (Sandbox Code Playgroud)
无法从路径'jQuery.2.0.1.1.nupkg'读取包.
这适用于不同的机器,但它在我目前的笔记本电脑上失败了.知道我做错了什么吗?
编辑
根据Damian的回答,下面,我只需删除位于此处的NuGet缓存的内容:
C:\ Users \用户名\ AppData \本地\的NuGet \缓存
我正在尝试将对象传递给onclick事件中的函数.如果我运行下面的代码,我会得到Uncaught SyntaxError: Unexpected indentifier.如果我取消注释该JSON.stringify行,并使用taskAsJson代替task,我会得到相同的错误.
$.each(tasks, function (index, task) {
//var taskAsJson = JSON.stringify(task);
items.push('<li><a href="#" onclick="showTask(' + task + ');">' + task.Description + '</a></li>');
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我硬编码一个值,比如5,它就可以工作,并且会传递给函数.
$.each(tasks, function (index, task) {
items.push('<li><a href="#" onclick="showTask(' + 5 + ');">' + task.Description + '</a></li>');
});
Run Code Online (Sandbox Code Playgroud)
当我尝试传递对象时,为什么会出现错误?为了能够通过task或者我需要改变taskAsJson什么?
注意:items是一个用于更新div和listview的数组:
$('#appTasks').append(items).listview('refresh');
Run Code Online (Sandbox Code Playgroud) 编辑:我的问题不是关于使用块及其工作原理.我的问题是关于两种方法的区别,如下所示.
我正在阅读CQRS旅程指南,我不明白这行代码:
using (repo as IDisposable)
Run Code Online (Sandbox Code Playgroud)
那是什么意思?为什么将它用作IDisposable?在典型的使用块中,不需要将其用作IDisposable:
using (var repo = this.respositoryFactory()) { // ... }
Run Code Online (Sandbox Code Playgroud)
知道为什么作者以第一种方式而不是第二种方式编写它?
这是代码出现的方法:
private Conference.Web.Public.Models.Conference GetConference(string conferenceCode)
{
var repo = this.repositoryFactory();
using (repo as IDisposable)
{
var conference = repo.Query<Conference>()
.First(c => c.Code == conferenceCode);
var conferenceModel =
new Conference.Web.Public.Models.Conference
{
Code = conference.Code,
Name = conference.Name,
Description = conference.Description
};
return conferenceModel;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AngularJS创建我的第一个Web应用程序.我习惯使用ASP.NET MVC 4,所以我想我会在服务器端使用它,而在客户端使用Angular.但在观看视频和进行研究后,似乎将这两者混合起来是错误的.其中一个原因是路由:Angular以自己的方式路由,ASP.NET MVC也是如此.
那么,对于熟悉ASP.NET MVC的人来说,前端的Angular可以使用哪种服务器端Web技术?我正在Visual Studio 2013中创建一个新项目,这些是我的选择:

注意:我不是在争论为什么一个选择比另一个更好; 我只是希望听到可用的可能性.我可以从那里调查.
注意2:我也可以使用Angular种子模板,但我可能会这样做,但这并不能解决服务器端使用的问题.
编辑 也许在这种情况下使用ASP.NET Web API是有意义的吗?请参阅/sf/answers/1476871861/.
我的事件处理程序当前具有如下类和方法签名:
public class MyEventHandler : IIntegrationEventHandler
public void Handle(IntegrationEventintegrationEvent) // IntegrationEvent is the base class
Run Code Online (Sandbox Code Playgroud)
我想做的是这样的(以便处理程序可以接受具体类型):
public class MyEventHandler : IIntegrationEventHandler<MyEvent>
public void Handle(MyEvent integrationEvent)
Run Code Online (Sandbox Code Playgroud)
在 Startup.cs 中,我这样做了:
services.AddTransient<IIntegrationEventHandler<MyEvent>, MyEventHandler>();
Run Code Online (Sandbox Code Playgroud)
问题是注入这些处理程序的服务不能使用开放泛型,如下所示:
public MyService(IEnumerable<IIntegrationEventHandler<>> eventHandlers)
: base(eventHandlers)
Run Code Online (Sandbox Code Playgroud)
指定基类也不起作用:
public MyService(IEnumerable<IIntegrationEventHandler<IntegrationEvent>> eventHandlers)
: base(eventHandlers)
Run Code Online (Sandbox Code Playgroud)
这给了我 0 个处理程序。
当前方法的工作原理是我注入了所有 7 个处理程序。但这意味着处理程序必须在其方法中接受基类,然后进行强制转换。没什么大不了的,但如果我能让处理程序接受它所关心的具体类型,那就太好了。这可能吗?
在Visual Studio 2010中运行自动化测试后,"代码覆盖率结果"选项卡会显示我不理解的内容.其中一个被测试的类称为ApplicationData.它显示在代码覆盖列表中.但在这种情况下,它的变体也出现了三次(见下文).
如果我在代码覆盖率选项卡中展开每个ApplicationData实例,则第一个显示所有方法,其余显示一些方法.
我的问题是......附加了<> c__DisplayClass的额外ApplicationData类是什么?

我得到一个编译时错误,我的方法调用有一些无效的参数.
public abstract class EntityBase
{
public virtual List<ValidationResult> Validate<T>()
{
// This line causes the error:
var validationResults = this.ValidateEntity<T>(this, true).ToList();
}
protected IEnumerable<ValidationResult> ValidateEntity<T>(T entity, bool ignoreNullViolations)
{
// Code here
}
}
Run Code Online (Sandbox Code Playgroud)
这门课是抽象的.那应该没问题.我尝试在方法签名中指定T的类型,但这没有帮助.为什么不编译?我不能传递this给期望T参数的方法?
编辑 - 可能的解决方案:
public virtual List<ValidationResult> Validate<T>() where T : class
{
var validationResults = this.ValidateEntity<T>(this as T, true).ToList();
}
Run Code Online (Sandbox Code Playgroud)
编辑2
由于T应该只是一个子类,我认为类签名应该更改为泛型,以便强制子类设置它.然后路过this不会是这样的黑客.
当我运行此代码时,与数据库的连接数在之后增加到3 connection.Open()。为什么它之后不降到2 connection.Close()?
private static void AdoNetStuff()
{
var connection = new SqlConnection(@"Initial Catalog=abook;server=.\SqlExpress;Integrated Security=true");
var sqlCommand = new SqlCommand("SELECT TOP 10 * FROM dbo.Entity", connection);
connection.Open();
sqlCommand.ExecuteReader();
sqlCommand.Dispose();
connection.Dispose();
connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在控制台应用程序中,并且在关闭控制台应用程序之前,连接数不会降到2。
这就是我检查连接数的方式。
SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName
FROM sys.sysprocesses
WHERE dbid > 0 AND DB_NAME(dbid) = 'abook'
GROUP BY dbid, loginame
Run Code Online (Sandbox Code Playgroud)
我可以等一会儿再结束控制台应用程序,但我仍然有3个连接。一旦我结束该应用程序,连接数就会降到2。
c# ×7
generics ×2
angularjs ×1
asp.net ×1
asp.net-mvc ×1
autofac ×1
idisposable ×1
javascript ×1
jquery ×1
json ×1
nuget ×1
oop ×1
ravendb ×1
scriptcs ×1
sql-server ×1
using ×1