我有一个托管在 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;
}
}
}