很容易讓WCF服務在控制檯應用程序中運行。我無法獲得自行託管的WCF在Windows服務中工作。可能太多的安全問題需要處理。爲了改進控制檯應用程序服務託管示例,我製作了一個AttachService方法,它可以像這樣在自己的線程上運行。
public static AutoResetEvent manualReset;
// Host the service within this EXE console application.
public static void Main()
{
manualReset = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(AttachService);
//put Set() signal in your logic to stop the service when needed
//Example:
ConsoleKeyInfo key;
do
{
key = Console.ReadKey(true);
} while (key.Key != ConsoleKey.Enter);
manualReset.Set();
}
static void AttachService(Object stateInfo)
{
// Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), new Uri("net.tcp://localhost:9000/servicemodelsamples/service")))
{
// Open the ServiceHost to create listeners and start listening for messages.
serviceHost.Open();
// The service can now be accessed.
//Prevent thread from exiting
manualReset.WaitOne(); //wait for a signal to exit
//manualReset.Set();
}
}
我的目標是使用OnStart方法中使用Process類的Windows服務執行此控制檯應用程序。感謝@Reed Copsey對WaitOne()的建議。
值得注意的是,Thread.Sleep(0)只能休眠足夠長的時間,讓其他線程運行,然後返回。它不會有等待任何一段時間的效果。您可能已經註冊了Thread.Sleep(Timeout.Infinite)(值爲-1),該值將無限期阻止,但ManualResetEvent比此更好。 – Josh 2011-01-12 02:18:50
相關提示謝謝您的幫助! – bunglestink 2011-01-12 02:23:23