어셈블리를 Windows 서비스 (ala NServiceBus)로 호스트 할 수있는 매우 간단한 Generic Host 솔루션을 개발 중입니다. 다음 예외 (Dru의 blog post에 언급 된 주석과 유사)를 건너오고 있습니다. 다른 AppDomains에서 서비스를 호스팅 할 수 있도록이 작업이 필요합니다.ConfigureServiceInIsolation - Generic Host를 사용하여 Topshelf 서비스 실행
"형 'MyProject.WindowsServices.GenericHost.Program + <> c__DisplayClass5'총회에서 'MyProject.WindowsServices.GenericHost, 버전 = 1.0.0.0, 문화, PublicKeyToken = null이 중립 ='로 직렬화 표시되지 않습니다."
topshelf 홈페이지 (topshelf-project.com)의 다운로드 링크에서 제공되는 Topshelf 1.0 RC 바이너리를 사용하고 있습니다. 나는 최신 빌드 (29/07/2010)를 시험해 보았고, 구글 코드와 github에서 다운로드 할 수있는 빌드를 만들었다! 나는 그들 중 누구도 나를 위해 일하게 할 수 없다!
이 버전은 Topshelf의 이전 버전을 사용하는 NServiceBus 라이브러리에서 작동합니다 (dll은 버전 0.8.0.96입니다). 아래에있는 몇 가지 사소한 코드 변경 사항 (HowToBuildService 대신 CreateServiceLocator 사용)을 사용하면 이전 버전의 바이너리와 함께 사용할 수 있지만 계획된 픽스 나 향상된 기능을 활용하려면 최신 코드를 사용하는 것이 좋습니다.
여기 내 코드입니다. 노트의 또
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를 구현하고 나는 또한 도움이 될 있는지 확인하기 위해 직렬화 이러한 클래스를 만든 것입니다. 문제를 일으키는 클래스는 아니지만, 내가 설정 한 람다 중 하나 이상에 대해 C# 컴파일러가 생성 한 익명 형식에 대해 불평하는 것으로 보입니다.
다른 사람이 ConfigureServiceInIsolation()을 사용하여이 문제가 발생합니까? 그렇지 않다면, 내가 누락 된 것을 누구라도 아는가? 추가 정보가 필요하면 알려주세요 (예 : 스택 추적 또는 더 많은 코드.
답변 해 주셔서 감사합니다. 트래비스! 향후 버전과 같은 사운드에는 일종의 일반용 호스트가 있습니다. Windows 서비스를 실행하기 위해 파일을 드롭하는 것은 매우 멋진 기능입니다. 지금은 InIsolation 부분없이 뭔가를 설정할 수 있는지 알게 될 것입니다. 서비스마다 사용자 지정 실행 파일로 다시 전환 할 수도 있습니다.이 방법은 단기적인 솔루션으로도 좋습니다. 다음 버전이 준비되었을 때 어떤 아이디어가 있습니까? – Sam
내 내부 릴리스를 충족하기 위해 2010 년 10 월 출시를 목표로 삼았습니다.마감 기한이 이해 관계자들에 의해 추진 되더라도 우리는 여전히 그 일정을 맞출 것으로 기대합니다. – Travis
이 모든 것이 공개되면 Udi를 사용하여 NServiceBus 메인 라인으로 가져옵니다. 따라서 Isolation없이 작동 시키면 Udi가 새로운 비트가 섞일 때까지 그냥 앉아있을 수 있습니다.하지만 그건 완전히 당신에게 달린 것입니다. 우디가 올해 우리가 제공 할 수있는 몇 가지 기능을 추가로 요구하고 있음을 알고 있습니다. – Travis