我们有一个队列服务,对于每个项目,它将采用模板.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>
有没有办法: