阻止RCFAPI32和RASMANCS的WCF跟踪注册表项

时间:2017-05-12 16:08:42

标签: .net windows wcf tracing

我们有一个队列服务,对于每个项目,它将采用模板.exe文件,将其复制到项目的唯一名称,并使用Process.Start来旋转exe。< / p>

这样做是为了确保每个项目完全隔离,并且如果它已经死亡,则不会杀死任何其他项目(或服务)。

这个exe使用了几个WCF服务。当这些exes旋转时,他们会将跟踪密钥插入HKEY_LOCAL_MACHINE\SYSTEM\SOFTWARE\Microsoft\Tracing。因为每个exe都有一个唯一的名称,所以这很快就会使注册表膨胀(最终达到多GB大小)。为了防止服务器死亡,我们有一个定期删除这些密钥的过程。

这些密钥似乎是由于WCF端点而自动创建的(密钥以_RASAPI32_RASMANCS结尾)。您可以使用默认WCF项目的简单示例来看到这一点:

Service1.svc

public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

Program.cs(调用应用程序)

class Program
{
    static void Main(string[] args)
    {
        var svc = new ServiceReference1.Service1Client();
        var val = svc.GetData(55);

        Console.WriteLine(val);
        Console.ReadLine();
    }
}

App.Config(调用应用程序)

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_HTTP" closeTimeout="00:00:30"
          openTimeout="00:00:30" receiveTimeout="00:10:00" sendTimeout="00:10:00"
          maxBufferPoolSize="8388608" maxBufferSize="8388608" maxReceivedMessageSize="8388608"
          useDefaultWebProxy="false"  >
                <readerQuotas maxDepth="64" maxStringContentLength="8388608"
            maxArrayLength="8388608" maxBytesPerRead="16384" maxNameTableCharCount="16384"  />
                <security mode="None"  />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:58801/Service1.svc" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_HTTP" contract="ServiceReference1.IService1"
        name="Service1" />
    </client>
</system.serviceModel>

有没有办法:

  1. 禁用这些注册表项的创建
  2. 路由注册表项以使用特定名称,而不仅仅是执行程序集名称?

0 个答案:

没有答案