我已经看到很多方法可以启用WCF消息日志记录,但我想阻止在客户端桌面应用程序(WPF或WinForms)中记录WCF消息?我担心一些高级用户会弄清楚如何通过编辑配置文件打开日志记录,并有办法存储我的应用程序发送到远程服务的敏感信息。如果用户知道他们正在做什么,它似乎对消息记录具有令人难以置信的控制。我搜遍了SO和MSDN,寻找一种方法来保护这个设置,并且无法通过编辑配置文件找到任何无法覆盖的内容。
答案 0 :(得分:1)
计算机可以做的任何事情,用户都可以做。这是一个不可逃避的不可改变的法律。这就是为什么有Keygens,这就是为什么软件破解的原因,这就是为什么你的程序不可能生成消息,但不允许用户看到它。
你可以通过一个看门狗来检查是否启用了日志记录,然后抛出错误,让他们变得更难,但下面只是一个简短的列表,列出了他们可以做些什么来篡夺这种表面上试图逃避用户的行为。 ; s访问消息:
nop
以及用于检测用户记录消息的所有聪明代码都已消失。在检查是否启用了跟踪方面,您可以使用如下构造:
private static bool IsWcfTracingEnabled()
{
TraceSource ts = new TraceSource("System.ServiceModel.MessageLogging");
return ts.Listeners.Count > 0;
}
将返回false
:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<clear />
</listeners>
</source>
</sources>
</system.diagnostics>
true
代表:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<clear />
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
或者:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" />
</sources>
</system.diagnostics>