我有几个并发运行的进程,我想要登录到同一个文件.
我们一直在使用Enterprise Library 4.1 Logging Application Block(带有a RollingFlatFileTraceListener),它工作正常,除了它在两个进程同时尝试写入日志文件时为日志文件名添加GUID这一事实(a System.Diagnostics.TextWriterTraceListener我相信的怪癖).
我尝试了各种各样的事情,包括Logger.Writer.Dispose()写入日志文件后调用,但每次写入日志条目时都不适合进行阻塞调用.
EntLib论坛建议将MSMQ与分销商服务一起使用,但这不是一个选项,因为我的公司不允许使用MSMQ.
有没有其他方法可以快速轻松地从多个线程/进程登录到同一个文件?
我想知道记录信息消息的"正确"方法是什么; 到文件,或在事件查看器中的特殊日志?
我喜欢记录到文件,因为我可以使用滚动平面文件监听器并查看每天的新记录,而且在事件查看器中我一次只能看到一条消息 - 在文件中我可以很容易地扫描一天.我的同事争辩说,文件占用空间,他喜欢在一个地方发出警告,错误和信息消息.你怎么看?有首选方式吗?如果是这样,为什么?
此外,任何方法中是否存在并发问题?我已经读过entlib是线程安全的,如果监听器不是线程安全的话,会生成一个Monitor.Enter,但我想确定(我们只是使用Logger.Write).我们正在使用entlib 3.1.
先感谢您.
我刚开始使用ms验证块,我觉得很棒.但是有关层之间数据验证的几个问题.
目前我正在使用存储库模式作为数据访问层的桥梁.在我的逻辑层中,我正在填充我的业务对象,然后使用验证块进行验证,然后将其传递到我的存储库层,然后将其传递到数据访问层以进行插入.我应该在存储库中再次验证它吗?如果是这样,我再次使用该块验证还是有更好的方法在此级别执行此操作?
我的存储过程是:
create Procedure spSetUser
(
@Name NVarchar(50),
@OrganicTitle NVarchar(30),
@UserName NVarchar(20),
@Password NVarchar(16),
@Result Int Output
)
As
Begin
Set @Result = -1
If Not Exists(Select UserId From dbo.Users Where UserName=@UserName)
Begin
Insert Into dbo.Users (Name,OrganicTitle,UserName,[Password])
Values(@Name,@OrganicTitle,@UserName,@Password)
Set @Result = SCOPE_IDENTITY()
End
Return
End
Go
Run Code Online (Sandbox Code Playgroud)
我的班级是(在microsft企业库中):
[DataObjectMethod(DataObjectMethodType.Insert)]
public Int32 SetUser(UserFieldSet Data)
{
Int32 Result = 0;
object[] values = new object[] { Data.Name, Data.OrganicTitle, Data.UserName, Data.Password, Data.UserId };
Result = Db.ExecuteNonQuery("spSetUser", values);
return Result;
}
Run Code Online (Sandbox Code Playgroud)
结果是执行存储过程的行受影响,但我想得到@Result的值(过程的输出参数),我该如何得到它?
UserFieldClass是:
public class UserFieldSet …Run Code Online (Sandbox Code Playgroud) 我刚刚开始试用新的MS Enterprise Library 6.0 Logger块.当我尝试创建LogWriter时,我收到错误:
无法解析符号'EnterpriseLibraryContainer'
我有所有的参考和使用,但不能通过这个错误.
这个问题有解决方案吗?
我正在使用Microsoft Visual Studio 2005进行c#我的代码上有以下命名空间
using Microsoft.Practices.EnterpriseLibrary;
using Microsoft.Practices.EnterpriseLibrary.AppSettings;
using Microsoft.Practices.EnterpriseLibrary.Data;
Run Code Online (Sandbox Code Playgroud)
我继续得到这个错误:
- 命名空间"Microsoft"中不存在类型或命名空间名称"实践"(您是否缺少程序集引用?)
我该怎么办?
提前致谢.:)
我有一个较旧的应用程序,我在那里用来Microsoft.Practices.EnterpriseLibrary.Data从数据库中获取数据.我最近升级到.NET 4.5并希望利用await/async.
根据命名标准,我没有看到任何以"Async"结尾的方法,即使在最新版本的软件包中也是如此.是否可以在不手动使其异步的情况下对此ADO .NET库使用await/async?
我有问题从oracle获取图像字节数据.reader("image")总是返回0长度.他们的任何解决方法?如果我使用oledb它然后它的工作但不工作Microsoft EnterpriseLibrary.
using (IDataReader reader = ExecuteNonQueryOracle(Query))
{
while (reader.Read) {
dict("image") = reader("image");
}
}
public object ExecuteNonQueryOracle(string Query)
{
using (dbCommand == CurrentDatabase.GetSqlStringCommand(Query)) {
dbCommand.CommandType = CommandType.Text;
return CurrentDatabase.ExecuteReader(dbCommand);
}
}
Run Code Online (Sandbox Code Playgroud) 有人可以向我解释Unity应用程序块的用途是什么?我试着查看文档,但它非常抽象.
Unity块有哪些实际用途?
我正在开发一个复杂的业务应用程序,其中将有一个数据访问层.截至目前,我们有两个选择 - 要么创建我们自己的自定义数据访问层,要么使用Microsoft内置库.我正在寻找一些基本的理由来选择其中一种.
任何回复将受到高度赞赏.
c# ×9
asp.net ×2
logging ×2
.net ×1
ado.net ×1
architecture ×1
asp.net-4.5 ×1
async-await ×1
namespaces ×1
oracle ×1
oracle11g ×1
validation ×1