![](/img/trans.png)
[英]TopShelf- difference between ConfigureServiceInIsolation and ConfigureService
[英]Running Topshelf service using ConfigureServiceInIsolation - Generic Host
我正在開發一個非常簡單的通用主機解決方案,它允許我們將程序集作為Windows服務托管(ala NServiceBus)。 我遇到了以下異常(類似於Dru的博客文章中提到的評論)。 我需要這個工作,所以我可以在不同的AppDomain中托管服務。
“在程序集'MyProject.WindowsServices.GenericHost中輸入'MyProject.WindowsServices.GenericHost.Program + <> c__DisplayClass5',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未標記為可序列化。”
我正在使用Topshelf主頁(topshelf-project.com)上的下載鏈接提供的Topshelf 1.0 RC二進制文件。 我已經嘗試了最新版本(29/07/2010),以及可從谷歌代碼和github下載的版本! 我不能讓他們中的任何一個為我工作!
這是在NServiceBus庫中使用舊版本的Topshelf(dll版本為0.8.0.96)。 通過對我下面的代碼進行一些小的代碼更改(使用CreateServiceLocator代替HowToBuildService)它對我來說對這些舊的二進制文件有用,但我寧願堅持使用最新的代碼來利用任何計划的修復或增強功能。
這是我的代碼。
static void Main(string[] args)
{
ArgumentParser arguments = new ArgumentParser(args);
string configFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
arguments.ServiceType.Assembly.ManifestModule.Name + ".config");
RunConfiguration cfg = RunnerConfigurator.New(x =>
{
x.SetServiceName(arguments.ServiceName);
x.SetDisplayName(arguments.DisplayName);
x.SetDescription(arguments.Description);
if (string.IsNullOrEmpty(arguments.UserName))
{
x.RunAsLocalSystem();
}
else
{
x.RunAs(arguments.UserName, arguments.Password);
}
x.ConfigureServiceInIsolation<GenericHost>(c =>
{
c.ConfigurationFile(configFile);
c.Named(arguments.ServiceType.AssemblyQualifiedName);
c.HowToBuildService(name => new GenericHost(arguments.ServiceType));
c.WhenStarted(tc => tc.Start());
c.WhenStopped(tc => tc.Stop());
});
});
Runner.Host(cfg, args);
}
另外值得注意的是,我的GenericHost類和arguments.ServiceType標識的類都實現了MarshalByRefObject,我還使這些類Serializable看看是否有用。 不是這些類引起了問題,它似乎抱怨C#編譯器為我配置的一個或多個lambda生成的匿名類型。
是否有其他人使用ConfigureServiceInIsolation()看到此問題? 如果沒有,有誰知道我在這里缺少什么? 如果您需要更多信息,請告訴我,例如堆棧跟蹤或更多代碼。
如果您只在主機內使用一項服務,我會刪除“InIsolation”。 它不能正常工作,但在TopShelf的未來版本中(我們正在研究它)我認為我們有更好的答案來解決這個問題。 除了能夠在主機中刪除文件並在新的AppDomain中自動啟動服務之外。
我會說這屬於一個已知問題,除非有令人信服的理由使用InIsolation暫時避開它。 您無法跨應用程序域障礙編組lambda表達式,因此您遇到的問題。 如果InIsolation問題非常重要,我可以在計划發布最新版本之前研究解決這個問題與時間表的關系。 [你可以抓住最新的開發者。 來自這里的位: http : //github.com/legomaster/Topshelf-警告,我們仍在積極開發中,但我認為所有主要的錯誤現在都被壓扁了]。
如果您想進一步討論這個問題,最簡單的方法是在所有開發人員都在觀看的MassTransit列表中發帖: http ://groups.google.com/group/masstransit-discuss
我希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.