标签: enterprise-library

具有企业应用程序块的自定义跟踪侦听器

我目前正在开发的项目使用Enterprise Libraries V3.1框架进行日志记录.

我需要获取生成的日志文件并将其存档在特定点.内置的跟踪侦听器似乎使文件在记录事件之间保持打开状态.我已经设置了一个自定义跟踪侦听器,它将附加到文件并关闭它,以便文件始终可以移动.

它看起来像这样(为清晰起见,减去错误处理):

[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class AlwaysClosedTextFileTraceListener : CustomTraceListener
{
    private string logFilePath;

    public AlwaysClosedTextFileTraceListener ()
    {
        logFilePath = @"hardcodedpath\log.txt";
    }

    public override void Write(string message)
    {
        using (StreamWriter logFile = File.AppendText(logFilePath))
        {
            logFile.Write(message);
            logFile.Flush();
            logFile.Close();
        }
    }

    public override void WriteLine(string message)
    {
        using (StreamWriter logFile = File.AppendText(logFilePath))
        {
            logFile.WriteLine(message);
            logFile.Flush();
        }
    }

    public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
    {
        if (data is LogEntry && this.Formatter != null)
        {
            WriteLine(this.Formatter.Format(data …
Run Code Online (Sandbox Code Playgroud)

c# logging enterprise-library

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

Microsoft企业库缓存应用程序块不是线程安全的?

我创建了一个超级简单的控制台应用程序来测试企业库缓存应用程序块,行为令人困惑.我希望我搞砸了一些容易在设置中修复的东西.为了测试目的,我让每个项目在5秒后过期.

基本设置 - "每秒选择0到2之间的数字.如果缓存还没有它,请将其放在那里 - 否则只需从缓存中获取它.在LOCK语句中执行此操作以确保线程安全.

App.config中:

<configuration>
  <configSections>
    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <cachingConfiguration defaultCacheManager="Cache Manager">
    <cacheManagers>
      <add expirationPollFrequencyInSeconds="1" maximumElementsInCacheBeforeScavenging="1000"
      numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
      type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      name="Cache Manager" />
    </cacheManagers>
    <backingStores>
      <add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      name="Null Storage" />
    </backingStores>
  </cachingConfiguration>
</configuration>
Run Code Online (Sandbox Code Playgroud)

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

namespace ConsoleApplication1
{
    class Program
    {
        public static ICacheManager cache = CacheFactory.GetCacheManager("Cache Manager");
    static …
Run Code Online (Sandbox Code Playgroud)

.net c# caching enterprise-library thread-safety

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

使用Oracle.DataAccess.Client将EntLib 4.1升级到5

我正在将项目从EntLib 4.1升级到EntLib 5.我已经浏览了迁移指南,更改了所有引用并更新了所有配置文件以指向EntLib 5.一切正常,接受Oracle数据库访问.使用配置文件:

<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>
  <dataConfiguration defaultDatabase="prod">
    <providerMappings>
      <add databaseType="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase, Microsoft.Practices.EnterpriseLibrary.Data"
        name="Oracle.DataAccess.Client" />
    </providerMappings>
  </dataConfiguration>
  <connectionStrings>
    <add name="prod" connectionString="Data Source=dev;User Id=dev;Password=dev;"
      providerName="Oracle.DataAccess.Client" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

与4.1一起工作的所有调用都DatabaseFactory.CreateDatabase()失败了:

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

如果我Oracle.DataAccess.Client用微软取而代之,System.Data.Oracleclient那一切都会再次起作用,但并不是ODP.net的可爱.有谁知道如何使用EntLib 5?

干杯,Mlk

.net enterprise-library odp.net

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

格式化Logging Application Block的SystemDiagnosticsTraceListenerData侦听器的日志记录

我需要执行日志记录到控制台(或调试/跟踪).目前我正在使用Ent Lib 4.1 Logging Application Block.要登录到控制台,我使用SystemDiagnosticsTraceListenerData和System.Diagnostics.ConsoleTraceListener.

它可以很好地执行日志记录到控制台,但是我无法为此lister类型使用格式化程序,因此无法将日志条目格式化为所需的格式.我需要的只是日志消息,没有默认提供的所有附加信息(这使得日志对我的情况不太可读).

我是否缺少任何配置选项来启用SystemDiagnosticsTraceListener的格式化?

.net logging enterprise-library

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

企业库4 dataconfiguration标记

我正在使用Enterprise库进行数据访问.当我运行应用程序时,在CreateDatabase()语句中,我收到此异常:

用户代码未处理Microsoft.Practices.ObjectBuilder2.BuildFailedException消息="当前构建操作(构建密钥构建密钥[Microsoft.Practices.EnterpriseLibrary.Data.Database,null])失败:值不能为null或为空字符串.(策略类型Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfiguredObjectStrategy,index 2)"Source ="Microsoft.Practices.ObjectBuilder2"

现在,我google了一下,发现我必须放置

<dataConfiguration defaultDatabase="LocalSqlServer"/>
Run Code Online (Sandbox Code Playgroud)

但我不知道在哪里.这是正确的解决方案吗?

另外,在安装企业库时我没有看到任何连接字符串声明?所以,我想知道如何从web.config文件中获取连接字符串.

在我的web.config文件的连接字符串部分中,我有:

<remove name="LocalSqlServer"/>
 <add name="LocalSqlServer" connectionString="Data Source=MSTR;Initial Catalog=USERDb;Integrated Security=true;" providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)

asp.net enterprise-library asp.net-3.5

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

启用/禁用企业库登录生产

在我的制作中,我不想让日志条目具有严重性Verbose(或Debug).我只需要信息,错误等.启用和禁用日志记录(调试条目)的正确方法是什么?

我做了一些研究,一种可能性是使用Custom Filter类来启用和禁用严重性为"verbose"的所有日志.但是在生产中部署应用程序时,启用和禁用的正确方法是什么?

c# asp.net-mvc logging enterprise-library asp.net-mvc-2

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

为什么我必须在客户端代码中引用ExceptionHandling.Logging dll?

我有一个编译成dll的数据访问层.在这个层中,我使用Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll来记录异常,然后将它们扔回调用者.

我有一个引用数据访问层DLL的客户端应用程序,但没有直接调用Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll.当数据访问层中发生异常时,我在客户端代码中遇到以下运行时异常,除非我从客户端应用程序添加对Enterprise Library dll的引用.

类型 'Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler,Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging,版本= 5.0.414.0,文化=中性公钥= 31bf3856ad364e35' 无法解析.请验证拼写是否正确或是否提供了完整的类型名称.

我不明白为什么客户端必须引用Enterprise Library dll,即使它没有在代码中引用它.

任何想法将不胜感激.

enterprise-library c#-4.0

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

某些企业库应用程序块是否已过时?

随着ASP.Net中新的范例的引入,企业库中的一些应用程序块是否已经过时了?例如,请看以下内容:

  • ASP.Net成员,角色和配置文件提供程序,而不是安全应用程序块
  • LINQ to SQL&Entity Framework而不是数据访问应用程序块

上述应用程序块是否仍然相关?有人可以说明何时以及为何使用一个而不是另一个?

asp.net authentication authorization enterprise-library daab

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

企业库5.0缓存datareader和访问者方法的自定义类之间的映射

想知道Enterprise Library 5.0的Accessor方法是否缓存datareader的字段以及性能的自定义类,以便它不使用反射在自定义类上查找字段名称,并且在将datareader映射到datareader时不会在datareader上查找字段名称对象?因为将自定义类字段映射到每个访问/代码块的datareader字段是一项相当昂贵的操作

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>();
        var r = db.ExecuteSqlStringAccessor<Region>("SELECT * FROM Region");
    }

}

public class Region
{
    public string RegionnId { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.net c# performance enterprise-library enterprise-library-5

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

将企业库5迁移到6

试图从Enterprise Library 5.0迁移到6.0,我遇到了一些麻烦.也许这会有助于其他人.

以下配置是(静默)异常记录到数据库的示例:

<configSections>
  <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" requirePermission="true" />
  <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" requirePermission="true" />
</configSections>
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
  <listeners>
    <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database"
         listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database"
         databaseInstanceName="LogContext" writeLogStoredProcName="WriteLog"
         addCategoryStoredProcName="AddCategory" formatter="Text Formatter" />
  </listeners>
  <formatters>
    <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging"
         template="Timestamp: {timestamp}{newline}..."
         name="Text Formatter" />
  </formatters>
  <categorySources>
    <add switchValue="All" name="Exception">
      <listeners>
        <add name="Database Trace Listener" />
      </listeners>
    </add>
  </categorySources>
</loggingConfiguration>
<exceptionHandling>
  <exceptionPolicies>
    <add name="UiPolicy">
      <exceptionTypes>
        <add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
             postHandlingAction="None">
          <exceptionHandlers>
            <add name="Logging …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc logging enterprise-library exception-handling

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