小编Ben*_*ter的帖子

.net中的线程安全队列(列表)

我需要创建一个线程安全的项目列表,以添加到lucene索引.

以下线程安全吗?

public sealed class IndexQueue
{
    static readonly IndexQueue instance = new IndexQueue();
    private List<string> items = new List<string>();

    private IndexQueue() { }

    public static IndexQueue Instance {
        get { return instance; }
    }

    private object padlock = new object();

    public void AddItem(string item) {
        lock (padlock) {
            items.Add(item);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

即使从内部列表中获取项目,是否还需要锁定?

我们的想法是,我们将运行一个单独的任务来从indexqueue中获取项目并将它们添加到lucene索引中.

谢谢Ben

c# multithreading lucene.net thread-safety

13
推荐指数
1
解决办法
1万
查看次数

实体框架代码首先延迟加载非导航属性

我首先使用实体​​框架代码CTP4.

是否有可能像NH 3中那样延迟加载非导航属性.

一个常见的例子是拥有一个包含二进制列的表.我只想在我的代码中明确要求该属性时检索此列的数据,例如image.ImageData

谢谢Ben

entity-framework-4 ef-code-first

13
推荐指数
1
解决办法
1505
查看次数

如何清除jquery验证错误

我正在hijaxing现有的表单和POST到服务器.jQuery validate执行大部分验证,但如果验证在服务器上失败,我们将错误作为JSON返回给客户端.

以下是执行此操作的代码:

<script type="text/javascript">

    $(function () {

        $("form").submit(function (e) {
            var $form = $(this);
            var validator = $form.data("validator");

            if (!validator || !$form.valid())
                return;

            e.preventDefault();

            $.ajax({
                url: "@Url.Action("index")",
                type: "POST",
                data: $form.serialize(),
                statusCode: {
                    400: function(xhr, status, err) {                           
                        var errors = $.parseJSON(err);
                        validator.showErrors(errors);
                    }
                },
                success: function() {
                    // clear errors
                    // validator.resetForm();
                    // just reload the page for now
                    location.reload(true);
                }
            });
        });

    });

</script>
Run Code Online (Sandbox Code Playgroud)

问题是如果POST成功,我似乎无法清除验证错误.我已经尝试过呼叫,validator.resetForm()但这没有区别,showError()呼叫添加的错误消息仍然显示.

注意我也使用jQuery.validate.unobtrusive插件.

jquery-validate unobtrusive-validation

13
推荐指数
1
解决办法
2万
查看次数

延迟域事件的创建和发送

我一直在使用域事件模式 - 它使我们能够在域层中尽可能多地封装行为,并为我们的应用程序的其他部分订阅域事件提供了一种很好的方法.

目前我们正在使用一个静态类,我们的域对象可以调用它来引发事件:

static class DomainEvents
{
    public static IEventDispatcher Dispatcher { get; set; }

    public static void Raise<TEvent>(TEvent e)
    {
        if (e != null)
        {
            Dispatcher.Dispatch(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这仅仅是一个IEventDispatcher实际执行调度发布事件的垫片.

我们的调度程序实现只是使用我们的Io​​C容器(StructureMap)来定位指定类型的事件的事件处理程序.

public void Dispatch<TEvent>(TEvent e)
{
    foreach (var handler in container.GetAllInstances<IHandler<TEvent>>())
    {
        handler.Handle(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以.但是,这种方法存在一些问题:

仅在成功持久保存实体时才应分派事件

参加以下课程:

public class Order
{
    public string Id { get; private set; }
    public decimal Amount { get; private set; }

    public …
Run Code Online (Sandbox Code Playgroud)

c# messaging domain-driven-design ravendb domain-events

12
推荐指数
1
解决办法
1736
查看次数

如何在抛出请求验证异常时显示自定义错误页面?

我们为ASP.NET抛出的异常配置了以下自定义错误页面:

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="400" redirect="~/400.aspx"/>
  <error statusCode="404" redirect="~/404.aspx"/>
  <error statusCode="500" redirect="~/500.aspx"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)

设置redirectMode="ResponseRewrite"很重要,因为它确保URL不会更改(我相信ASP.NET执行Server.Transfer而不是Response.Redirect).

不幸的是,这不适用于请求验证错误.例如,如果我导航到/some/page/<script>ASP.NET的请求验证启动并且HttpException抛出了a,则启用自定义错误.但是,我没有显示自定义错误页面,而是收到以下消息:

'/'应用程序中的服务器错误.

运行时错误

描述:处理您的请求时发生异常.此外,执行第一个异常的自定义错误页面时发生另一个异常.请求已终止.

为什么ASP.NET无法在此方案中显示我的自定义错误页面?错误页面中没有代码,只有HTML,所以我知道错误页面本身不会抛出任何异常.

此外,如果我自己捕获错误Application_Error并发出Server.Transfer它工作正常,所以我很好奇ASP.NET正在做什么.

如果我们要自己解决这个问题,那么有更好的解决方案吗?

protected void Application_Error(object sender, EventArgs e)
{
    var ex = Server.GetLastError() as HttpException;
    if (ex != null 
        && ex.Message.StartsWith("A potentially dangerous Request.Path value was detected from the client")
        && HttpContext.Current.IsCustomErrorEnabled)
    {
        Server.Transfer("400.aspx");
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net custom-errors request-validation

12
推荐指数
1
解决办法
3222
查看次数

Azure - 如何解决失败的部署问题

我在管理控制台中有一个无法部署的工作角色(在初始化和中止之间循环).它在模拟器中运行良好.

令人沮丧的是,部署失败了,它似乎几乎不可能找到原因.

我已经检查了所有连接字符串,启用了诊断程序,检查了我所有的程序集已部署,googled ALOT并丢失了一些头发.

我现在的观点是,我一点一点地添加代码,并重新部署以找到失败的代码,这个过程非常缓慢.

worker本身连接到sql azure和azure存储.我把它连接到模拟器中的实时端点没有任何问题.

配置StructureMap(IoC)后,它似乎失败了.但是,我在我的网络角色中使用几乎相同的代码,这很好.

那我在哪里可以从这里(除了瓶子)?

azure

11
推荐指数
1
解决办法
6796
查看次数

如何检索表单的验证器

获取现有表单的当前jQuery验证器对象的正确方法是什么?

注意,验证器是使用jQuery Unobtrusive验证插件配置的,因此我没有对它的引用.

jquery-validate

11
推荐指数
2
解决办法
5837
查看次数

ASP.NET处理PUT/DELETE动词

这一般适用于ASP.NET,但也适用于Web API.

如何在启用RAMMFAR(RunAllManagedModulesForAllRequests)的情况下处理PUT/DELETE谓词.

我无法在IIS中配置处理程序映射,因为我的站点托管在Azure Web角色上,并且我所做的任何更改都不会保留.

asp.net iis asp.net-web-api

11
推荐指数
1
解决办法
1万
查看次数

使用StructureMap在ASP.NET MVC 3 RC2中执行操作筛选依赖项注入

我一直在玩ASP.NET MVC RC2中的DI支持.

我已经为NHibernate的每个请求实现了会话,并且需要注入ISession我的"工作单元"动作过滤器.

如果我直接引用StructureMap容器​​(ObjectFactory.GetInstance)或使用DependencyResolver来获取我的会话实例,一切正常:

    ISession Session {
        get { return DependencyResolver.Current.GetService<ISession>(); }
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用我的StructureMap过滤器提供程序(继承FilterAttributeFilterProvider),我在请求结束时提交NHibernate事务时遇到问题.

就像ISession在请求之间共享对象一样.我经常看到这一点,因为我的所有图像都是通过MVC控制器加载的,因此我在正常页面加载时创建了20个左右的NHibernate会话.

我在动作过滤器中添加了以下内容:

    ISession Session {
        get { return DependencyResolver.Current.GetService<ISession>(); }
    }

    public ISession SessionTest { get; set; }

    public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext) {

        bool sessionsMatch = (this.Session == this.SessionTest);
Run Code Online (Sandbox Code Playgroud)

使用StructureMap过滤器提供程序注入SessionTest.

我发现在一个有20个图像的页面上,"sessionsMatch"对于2-3个请求是假的.

我对会话管理的StructureMap配置如下:

        For<ISessionFactory>().Singleton().Use(new NHibernateSessionFactory().GetSessionFactory());
        For<ISession>().HttpContextScoped().Use(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());
Run Code Online (Sandbox Code Playgroud)

在global.asax中,我在每个请求结束时调用以下内容:

    public Global() {
        EndRequest += (sender, e) => {
            ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
        };
    }
Run Code Online (Sandbox Code Playgroud)

这个配置线程安全吗?以前我使用自定义将依赖项注入到同一个过滤器中IActionInvoker.当我开始遇到上述问题时,这一直工作到MVC 3 RC2,这就是为什么我认为我会尝试使用过滤器提供程序.

任何帮助,将不胜感激. …

structuremap nhibernate asp.net-mvc-3

10
推荐指数
1
解决办法
2749
查看次数

KeyValuePair协方差

在这个例子中是否有更好的模仿协方差的方法?理想情况下我想做:

private IDictionary<string, ICollection<string>> foos;

public IEnumerable<KeyValuePair<string, IEnumerable<string>> Foos
{
    get
    {
        return foos;
    }
}
Run Code Online (Sandbox Code Playgroud)

KeyValuePair<TKey, TValue>不是协变的.

相反,我必须这样做:

public IEnumerable<KeyValuePair<string, IEnumerable<string>>> Foos
{
    get
    {
        return foos.Select(x => 
            new KeyValuePair<string, IEnumerable<string>>(x.Key, x.Value));
    }
}
Run Code Online (Sandbox Code Playgroud)

有更好/更清洁的方式吗?

c# covariance c#-4.0 keyvaluepair

10
推荐指数
1
解决办法
892
查看次数