下面的代码有效,但我很好奇为什么我需要Path以"DataContext"作为前缀?在大多数其他情况下,使用的路径是相对于DataContext的.是因为我使用的是RelativeSource吗?因为源是根级别(Window)?
<Style TargetType="TextBox">
<Setter
Property="IsReadOnly"
Value="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=DataContext.IsReadOnly}"/>
</Style>
Run Code Online (Sandbox Code Playgroud) 我正在使用HostingEnvironment.QueueBackgroundWorkItemASP.Net应用程序的后台运行工作,基于Scott Hanselman的博客文章如何在ASP.NET中运行后台任务.
我想将后台任务作为当前用户的身份运行.我已尝试在操作中传递WindowsPrincipal并设置Thread.CurrentPrincipal,但这不会导致Action作为当前用户执行.
这是可能的,还是使用HostingEnvironment总是暗示作为应用程序池标识运行?
编辑
不完全是我的原始问题,但我也试图通过CallContext.LogicalSetData()和CallContext.LogicalGetData()传递一个值.在Get侧,值始终为null.
编辑#2
也在排队方面尝试了这个:
using (HostingEnvironment.Impersonate(windowsIdentity.Token))
{
HostingEnvironment.QueueBackgroundWorkItem(work);
}
Run Code Online (Sandbox Code Playgroud)
当工作实际完成时,Action中的当前WindowsIdentity仍然是应用程序池标识.
我正在对IIS应用程序进行一些性能/可伸缩性测试,这些测试偶尔似乎会减慢到生产中的爬行速度.我能够使用NUnit一致地重现慢度.
在测试期间或生产中发生缓慢时,CPU和内存不会出现峰值.我强烈怀疑应用程序正在遭受线程饥饿,因为它似乎不是导致瓶颈的CPU,内存,I/O或数据库访问.我确实看到了看似线索饥饿的迹象; 例如,NLog的异步日志文件写入往往具有长时间的静默,随后是具有较旧时间戳的活动突发(即,较低优先级的线程正在等待线程释放以便写入).
我可以采取哪些步骤来明确确定应用程序确实是线程缺乏的,并且(假设是这种情况)确定导致问题的系统的确切区域?
编辑
我忽略了几乎所有的代码都是同步的(它是遗留系统).
我已经一年多没有看到这个问题的提问/回答了,而且我确信那段时间发生了很多变化。
如果您在 .Net/C# 环境(生产中)中使用 CouchDB,我想知道您使用的是哪个库,以及您使用它的经验。
我发现至少有四个库:Hammock、Relax、Divan 和 SharpCouch。然而,当我用谷歌搜索他们的名字+“CouchDB”时,我发现教程、博客文章、推荐书、文档等内容很少。似乎它们都没有二进制版本(都“拉源并构建”)。
这些库仍然很新/不成熟吗?它们是否如此简单以至于不需要文档?使用 CouchDB 的 .Net 开发人员如此之少以至于没有人在该领域谈论它吗?
感谢您的任何见解。
使用版本1.2.11.日志记录在我的开发机器上运行,但在部署时不会创建目录或日志.
我试过了:
每次更改后停止并启动应用程序池.
输出文件中没有生成任何内容.
我的log4Net配置如下.关于下一步该尝试的任何想法?
<?xml version="1.0"?>
<log4net debug="true">
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="..\Logging\log.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<threshold value="DEBUG" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="console" type="log4net.Appender.DebugAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="file" />
<appender-ref …Run Code Online (Sandbox Code Playgroud) 有没有理由从默认范围(瞬态?)切换到其他东西,除了需要为功能原因控制范围(例如Singleton)?
如果我坚持使用默认范围,每个插件类型的每个默认实例都将在每个请求(假设是一个Web应用程序)上实际实例化,这是正确的吗?这会明显影响性能吗?
我已经考虑过使用Http Session范围来限制每个登录用户的一个实例.但是,这将导致(至少)每个插件类型的一个实例始终存储在内存中.使用默认范围,这些实例仅在处理页面请求时保留在内存中.我不确定哪个更好.
如果您使用StructureMap,您通常如何为每个插件类型配置范围?
感谢您的任何见解,
菲尔
我在Visual Studio 2010中设置了一个后期构建事件.我遇到的问题是当我使用Run(F5)开始调试时事件不会运行 - 如果我显式构建(F6)它似乎只运行).
即使源文件已更改(因此必须构建以便运行),这似乎也会发生.
是否有控制此行为的设置?
不为Entity Framework(v4)实体标记虚拟导航属性的影响是什么?
如果我不使用延迟加载,但忽略了正确的加载,访问(未加载)属性会发生什么?
是否会在延迟加载之外产生任何其他影响,或者是需要虚拟导航属性的主要功能?
我目前的注册码:
Assembly web = Assembly.Load("MyAssembly");
types.AddRange(web.GetTypes());
//etc.
foreach (var theInterface in types.Where(t => t.IsInterface))
{
var assignableType = types.Where(t => theInterface.IsAssignableFrom(t) && t != theInterface);
foreach (var type in assignableType)
{
container.RegisterType(theInterface, type);
}
}
Run Code Online (Sandbox Code Playgroud)
我的通用接口及其实现:
public interface IDomainEventHandler<in T>
{
void Handle(T message);
}
public class DomainEventHandler1 : IDomainEventHandler<PhilTest1>
{
public void Handle(PhilTest1 message)
{
throw new System.NotImplementedException();
}
}
public class DomainEventHandler2 : IDomainEventHandler<PhilTest2>
{
public void Handle(PhilTest2 message)
{
throw new System.NotImplementedException();
}
}
public class DomainEventHandler3 …Run Code Online (Sandbox Code Playgroud) 我正在使用Json.Net解决以下类的(反)序列化问题:
public class CoinsWithdrawn
{
public DateTimeOffset WithdrawlDate { get; private set; }
public Dictionary<CoinType, int> NumberOfCoinsByType { get; private set; }
public CoinsWithdrawn(DateTimeOffset withdrawDate, Dictionary<CoinType, int> numberOfCoinsByType)
{
WithdrawlDate = withdrawDate;
NumberOfCoinsByType = numberOfCoinsByType;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是构造函数参数"withdrawDate"的名称与属性名称"WithDrawlDate"不同.使名称匹配(甚至忽略大小写)修复了问题.
但是,我想要更好地理解这一点,所以我恢复了代码并在将两个setter公之后进行了测试.这也解决了这个问题.
最后,我从自动属性切换到具有支持字段的属性,以便我可以完全调试并查看实际发生的情况:
public class CoinsWithdrawn
{
private DateTimeOffset _withdrawlDate;
private Dictionary<CoinType, int> _numberOfCoinsByType;
public DateTimeOffset WithdrawlDate
{
get { return _withdrawlDate; }
set { _withdrawlDate = value; }
}
public Dictionary<CoinType, int> NumberOfCoinsByType
{
get { return _numberOfCoinsByType; }
set { _numberOfCoinsByType …Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×3
asp.net ×1
couchdb ×1
data-binding ×1
iis ×1
json ×1
json.net ×1
log4net ×1
starvation ×1
structuremap ×1
threadpool ×1
wpf ×1