标签: application-blocks

Microsoft异常处理块 - 它不是过度工程的完美示例吗?

自从微软推出应用程序块以来,我一直在碰到使用异常处理应用程序块的人.我最近对自己进行了仔细研究,并总结了如下基本功能(如果您已经知道它的作用,请跳过以下块):

异常处理应用程序块旨在集中并使配置文件完全配置以下关键异常处理任务:

  • 记录异常
  • 替换例外
  • 包装例外
  • 传播例外
  • 等等

该库通过修改try catch块来实现,如下所示:

try
{
  // Run code.
}
catch(DataAccessException ex)
{
    bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy");
    if (rethrow)
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

根据app.config中为策略名称指定的内容(请参阅此处的文档),HandleException将...

  • 抛出一个全新的异常(替换原来的异常)
  • 将原始异常包装在一个新异常中并抛出它
  • 吞下异常(即什么都不做)
  • 你有没有重新抛出原来的例外

此外,您还可以将其配置为预先执行更多操作(例如,记录异常).

现在这是我的问题:我完全没有看到如何替换,包装,吞下或重新抛出异常使其可配置是多么有益.根据我的经验,这个决定必须在您编写代码时做出,因为在更改异常处理行为时,您通常必须更改周围或调用代码.

例如,当您重新配置时,您的代码可能会开始行为不正确,以至于现在吞下特定点抛出的特定异常而不是重新抛出(可能在发生异常时不能执行catch块之后的代码).对于异常处理中的所有其他可能的更改也是如此(例如,替换 - >重新抛出,吞下 - >换行).

所以,对我来说,底线是异常处理块解决了实际上根本不存在的问题.异常记录和通知位很好,但是并非所有其他东西都只是过度工程的完美示例吗?

.net enterprise-library exception-handling application-blocks

19
推荐指数
2
解决办法
4678
查看次数

Polly Framework VS Microsoft瞬态故障处理

我想在我们的.net应用程序中引入瞬态故障处理.我看到现在有两个nu-get包.一个是Polly框架,另一个是Microsoft瞬态故障处理应用程序块.

我们调查并看到了支持异步功能和不同的重试策略.Polly框架还支持断路器.有人建议使用哪个框架有一些可靠的原因.此外,如果框架的利弊以及互联网社区的支持和未来扩展和支持的范围可以突出显示,那将是非常有用的.提前致谢.

.net c# application-blocks polly

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

log4net vs MS Logging Application Block

我试图了解使用log4netor企业库日志应用程序块(LAB)登录应用程序的利弊.我知道有一件事LAB很难用到log4net.

log4net enterprise-library application-blocks

7
推荐指数
2
解决办法
3046
查看次数

EntLib5:Loggin应用程序块未记录到事件日志(例外:无法构造类型LogWriter) - 任何人都可以帮忙吗?

嗨,您好,

我只是设置了Enterprise Library 5的日志记录应用程序块部分.我认为我已经完成了它,但它没有记录到事件日志,它在write方法上出错并给我以下异常.

    The type LogWriter cannot be constructed. 
         You must configure the container to supply this value.
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一张支票或告诉我我错过了什么..

首先,我使用winforms应用程序在Windows 7中运行.

这是我创建日志的方法,您可以看到write方法.

public class Logger : ILogger
{
    public void SendTest(string test)
    {
        LogEntry log = new LogEntry();
        log.EventId = 300;
        log.Message = test;
        log.Categories.Add("testing");
        log.Severity = TraceEventType.Information;
        log.Priority = 5;
        Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Write(log);

    }
}
Run Code Online (Sandbox Code Playgroud)

我的所有配置都是使用entlib5编辑器而不是手工编写的.并确认这是entlib.config所在的路径

    filePath="C:\myapp\entlib.config" />
Run Code Online (Sandbox Code Playgroud)

这是我的app.config,它指向我的entlib.config

<?xml version="1.0"?>
<configuration>
<configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<enterpriseLibrary.ConfigurationSource selectedSource="System Configuration Source">
    <sources>
        <add name="System …
Run Code Online (Sandbox Code Playgroud)

.net logging enterprise-library application-blocks logging-application-block

6
推荐指数
1
解决办法
6993
查看次数

Microsoft Code Contracts是否不适合验证用户输入?

我已经看到它写在其他地方SO,虽然企业库验证应用程序块旨在验证用户输入,代码契约旨在防止程序员错误.你会支持这个意见吗?为什么?

validation application-blocks code-contracts

4
推荐指数
1
解决办法
204
查看次数

Microsoft Security应用程序块的替代方案?

我们需要在我们的解决方案中实现基于角色的安全性,该解决方案具有asp.net,winforms和Web服务入口点.我们还需要一些前端来配置它.我真的不喜欢自己动手,我以前做了几次而且很乏味.

我一直没有成为MS AB的粉丝,因为我发现它们过于架构并且经过了不充分的单元测试,但我几年没有触及过它们.

安全AB值得一看,还是应该使用替代品?你会推荐什么?

.net security application-blocks

3
推荐指数
1
解决办法
2459
查看次数

记录应用程序块 - 记录调用者

使用Log4Net进行日志记录时,将调用日志的类放入日志文件中非常容易.我在过去发现,这使得跟踪代码并查看类中的流程变得非常容易.在Log4Net中,我在转换模式中使用%logger属性,如下所示:

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出:

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

您可以从输出中看到调用日志的类是Log4NetTechDemo.Tester,因此我可以很容易地将错误追溯到该类.

在Logging Applicaton Block中,我无法通过简单的日志调用来弄清楚如何执行此操作.有谁知道怎么做?如果是这样,那么这样做的一个例子或步骤将非常有帮助.

c# logging enterprise-library application-blocks

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

在日志应用程序块中将日期添加到日志文件名

我正在使用Microsoft Logging Application Block(版本5 beta 2),我正在尝试将日志文件的文件名动态设置为年月和日(然后每天写一个新的日志文件).但是,在运行时,记录器会忽略任何动态环境变量,例如%date%,%time%或%cd%.我可以将静态环境变量添加到文件名(例如%username%),但不能添加动态环境变量.有谁知道如何让滚动平面文件跟踪侦听器动态设置日志文件名中的日期?

(这就是我将文件名设置为:Log_%date%.log)

logging enterprise-library application-blocks

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