我有一个Azure辅助角色,负责检查4个服务总线队列.目前,我只是循环方法来手动检查队列.
while(true)
{
//loop through my queues to check for messages
}
Run Code Online (Sandbox Code Playgroud)
Azure SDK 2.0具有监听消息而不是轮询消息的能力.但是我见过的每个例子都使用Console.ReadKey()的控制台应用程序.有没有办法让工作者角色坐下来等待消息呢?
我试过了:
public override void Run()
{
_queueProcessors.ForEach(x => x.OnMessage(Process);
}
Run Code Online (Sandbox Code Playgroud)
其中_queueProcessors是QueueClients的列表,而Process是处理消息的私有方法.但是,worker角色会注册它们然后重新启动.
所以任何人都知道如何让队列客户端坐下来等待消息?
c# azure azure-worker-roles azureservicebus azure-servicebus-queues
我有一个子类 DbContext
public class MyContext : DbContext { }
Run Code Online (Sandbox Code Playgroud)
并且我对该实现有一个IUnitOfWork抽象MyContext,IDisposable以确保MyContext在适当的时间处理诸如的引用
public interface IUnitOfWork : IDisposable { }
public class UnitOfWork : IUnitOfWork
{
private readonly MyContext _context;
public UnitOfWork()
{
_context = new MyContext();
}
~UnitOfWork()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private bool _disposed;
protected virtual void Dispose(bool disposing)
{
if (_disposed) return;
if (disposing)
{
if (_context != null) _context.Dispose();
}
_disposed = true;
}
} …Run Code Online (Sandbox Code Playgroud) 我有Project实体和ProjectDTO.我正在尝试创建一个WebAPI控制器方法,可以获取并返回ProjectDTO并使其支持OData.
问题是我正在使用可以使用Project实体而不是Project DTO查询数据库的ORM.有什么方法可以根据ProjectDTO从OData应用过滤/排序/分页到Project实体查询?
public ODataQueryResult<ProjectDTO> GetProjects(ODataQueryOptions<ProjectDTO> query)
{
var context = new ORM_Context();
var projects = context.Projects; // IQueryable<Project>
var projectDtos = query.ApplyTo(projectDTOs)); // <-- I want to achieve something similar here
var projectDTOs =
projects.Select(
x =>
new ProjectDTO
{
Id = x.Id,
Name = x.Name
});
var projectsQueriedList = projectDtos.ToList();
var result = new ODataQueryResult<ProjectDTO>(projectsQueriedList, totalCount);
return result;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在WebApi中实现OData.我正在使用存储库模式和EF5(在后端),这仍然与我找到的所有示例一致.这是事情变得不稳定的地方.我试图隐藏EF生成的类隐藏在控制器中使用AutoMapper映射的模型后面.我看到的例子似乎都归还了回购中的任何内容
我不想在控制器中但在存储库中应用OData参数(已映射的结果)以保留延迟执行的值.我可以将ODataCriteria传递到存储库中,但是当我尝试Appy时,我得到一个错误,因为看起来选项/结果是从表示层而不是IQueryable <EF_Class>键入IQueryable <Model>.
我在另一篇文章中看到其他人没有注意到这一点,但是,它只是帖子的一小部分,似乎没有帮助.
还有其他人处理过这件事吗?我真的不想暴露EF类.哦,我先使用DB.
提前致谢...
我正在启动一个多项目解决方案,它将有多个入口点,例如Windows服务,ASP.NET网站,WebApi控制器等.我已经选择了SimpleInjector,因为它非常快,我不需要任何高级特征.
我的理解是SimpleInjector应该在启动时集中配置.从以下基本示例项目集开始
有多个入口点,SimpleInjector的引导应该在哪里进行,可以/应该集中处理(在这种情况下,配置过程需要引用所有项目才能设置所有解决方案类)?
我是否应该有一个全局实例(例如NS.Global.Container),它不引用任何其他项目,并且每个入口点都负责在启动时添加自己的实例要求(优雅地处理重复注册,如NS.Core.Model)?
我是否应该使用ResolveUnregisteredType事件来处理请求的注册?
我只是缺乏一些小学生的知识吗?
更新:
Steven在下面的评论中提供的链接给出了这个问题的全面答案.
c# dependency-injection inversion-of-control simple-injector
Windows Workflow Foundation是否提供了一种拦截或装饰活动的方法,例如记录?例如,为每个活动入口和出口点创建日志(理想情况下包括活动名称),而不修改所有现有项目代码.
例如,我有一个工作流程,其中包含一个打印"Hello world"的活动.在不修改XAML文件的情况下,我想捕获活动的进入和退出.我想在进入活动之前打印"输入Hello World活动",在活动打印出"Hello World"之后,我想打印"已完成的Hello World活动".
Windows Workflow是否提供了挂钩进入和退出活动的机制?
@ Richard210363已经在评论中添加了Windows Workflow Foundation支持此功能 - 请选择关闭此问题的用户是否可以考虑撤销他们的决定,因为问题显然有一个非常具体的答案使用相关框架?
我使用Simple Injector作为我的IoC容器.SimpleInjector使用这种简单的技术来处理Per Thread和Per Web Request的混合生活方式
container.RegisterPerWebRequest<IWebRepository, Repository>();
container.RegisterLifetimeScope<IThreadRepository, Repository>();
container.Register<IRepository>(container.GetInstance<Repository>());
// Register as hybrid PerWebRequest / PerLifetimeScope.
container.Register<Repository>(() =>
{
Repository repository;
if (HttpContext.Current != null)
repository = (Repository)container.GetInstance<IWebRepository>();
else
repository = (Repository)container.GetInstance<IThreadRepository>();
return repository;
});
Run Code Online (Sandbox Code Playgroud)
不幸的是(显然!),在我的UnitOfWork类的其他地方,当我使用Parallel.ForEach并尝试并行调用Repository类的多个实例时,这给了我一个问题,因为只有第一个线程在HttpContext中找到一个值.当前
using (TransactionScope scope = new TransactionScope())
{
Parallel.ForEach(new List<IRepository>() { _repository1, _repository2 ... },
(repository) =>
{
repository.Commit();
});
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
既然我已经写完了这个问题,我可以看到我可能会要求不可能或者是愚蠢的东西......但到底是什么......这可以做到吗?单个请求/线程注册是否可用于多个内部线程?
c# multithreading dependency-injection task-parallel-library simple-injector
我正在使用ASP.NET v4.5和linq实体我试图按周使用以下代码对数据进行分组
var groupedByWeek = salesOrdersList
.GroupBy(i => i.DueDate.AddDays(-(int)i.DueDate.DayOfWeek));
Run Code Online (Sandbox Code Playgroud)
但是我得到一个"黄色死亡屏幕",错误:
LINQ to Entities无法识别方法'System.DateTime AddDays(Double)'方法,并且此方法无法转换为商店表达式.
理想情况下我想说
var groupedByWeek = salesOrdersList.GroupBy(i => i.DueDate.WeekNumber);
Run Code Online (Sandbox Code Playgroud)
但生活并不那么容易!
有没有人知道使用Linq to Entities的周数的方法?
我已经安装了Orchard 1.7.0,为博客帖子启用了markdown(大致在这里详细说明),但是我无法弄清楚如何为我的帖子添加C#(或任何语言)的语法高亮显示.
当使用Castle Windsor通过(DI/IoC)模式相应地注册控制器及其依赖关系时,我在控制器上获得了"为此对象定义的无参数构造函数".有人可以看看下面的内容,看看我的错误,因为我看不到它.

在global.asax上注册的代码
public class MyApplication : System.Web.HttpApplication
{
public MvcApplication()
{
this.container = new WindsorContainer().Install(new DependencyInstaller());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),
new WindsorActivator(this.container));
}
}
Run Code Online (Sandbox Code Playgroud)
我的DI
public class DependencyInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IDatabaseFactory>().ImplementedBy<DatabaseFactory>().LifeStyle.PerWebRequest,
Component.For<IUnitOfWork>().ImplementedBy<UnitOfWork>().LifeStyle.PerWebRequest,
Component.For<IMappingEngine>().ImplementedBy<MappingEngine>().UsingFactoryMethod(() => Mapper.Engine).LifeStyle.Singleton,
Component.For<IFirmTasks>().ImplementedBy<FirmTasks>().LifeStyle.PerWebRequest,
Classes.FromAssemblyContaining<PersonController>().BasedOn<IController>().LifestyleTransient(),
Classes.FromThisAssembly().BasedOn<IHttpController>().LifestyleTransient(),
Classes.FromAssemblyNamed("Core.Firm.Tasks").Where(type => type.Name.EndsWith("Tasks")).WithServiceAllInterfaces().LifestylePerWebRequest(),
Classes.FromAssemblyNamed("Core.Firm.Repository")
.Where(type => type.Name.EndsWith("Repository")).WithServiceAllInterfaces().LifestylePerWebRequest()
);
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器
public class PersonController : Controller
{
private IFirmTasks tasks;
public PersonController(IFirmTasks tasks)
{
this.tasks …Run Code Online (Sandbox Code Playgroud) asp.net-mvc castle-windsor ioc-container inversion-of-control
c# ×9
odata ×2
.net ×1
aop ×1
asp.net ×1
asp.net-mvc ×1
azure ×1
decorator ×1
linq ×1
orchardcms ×1