Windows サービスでホストされている WCF サービスがあります。WCF サービスには、外部システムへの UdpClient 接続を行うスレッドがあります。Windows サービスが停止すると、スレッドが常に適切にシャットダウンされ、その接続を開いたままにしている UdpClient.Close() メソッドを呼び出すとは限らないことがわかりました (またはソケットだと思います)。その後、再度実行するとブロックされ、UdpClient はブロードキャストされたパケットを受信しません。私の問題は、Windows サービスが停止しているときに UdpClient.Close を呼び出していないことだと考えています。私の質問は、これらのリソースを適切に解放するにはどうすればよいですか? これが私のWindowsサービスのコードです。
public class MyWindowsService : ServiceBase
{
public ServiceHost serviceHost = null;
public MyWindowsService()
{
ServiceName = "MyWindowsService";
}
public static void Main()
{
ServiceBase.Run(new MyWindowsService());
}
protected override void OnStart(string[] args)
{
if(serviceHost != null)
{serviceHost.Close();}
serviceHost = new ServiceHost(typeof(MyWCFService));
serviceHost.Open();
}
protected override void OnStop()
{
if(serviceHost != null)
{
//Need to release unmanaged resources in the
//WCF service here. How would I reference my
//WCF service and send it a message to stop the threads?
serviceHost.Close();
serviceHost = null;
}
}
}