我创建一个WCF SOAP服务器,其操作需要一些时间来执行:
[ServiceContract]
public interface IMyService
{
[OperationContract]
string LongRunningOperation();
}
[ServiceBehavior(
ConcurrencyMode = ConcurrencyMode.Multiple,
UseSynchronizationContext = false,
InstanceContextMode = InstanceContextMode.Single)]
class MyService : IMyService
{
public string LongRunningOperation()
{
Thread.Sleep(20000);
return "Hey!";
}
}
class Program
{
static void Main(string[] args)
{
MyService instance = new MyService();
ServiceHost serviceHost = new ServiceHost(instance);
BasicHttpBinding binding = new BasicHttpBinding();
serviceHost.AddServiceEndpoint(typeof(IMyService), binding, "http://localhost:9080/MyService");
serviceHost.Open();
Console.WriteLine("Service running");
Thread.Sleep(10000);
serviceHost.Close();
Console.WriteLine("Service closed");
Thread.Sleep(30000);
Console.WriteLine("Exiting");
}
}
Run Code Online (Sandbox Code Playgroud)
ServiceHost打开,10秒后关闭它.
调用serviceHost.Close()时,当前连接的所有客户端(等待LongRunningOperation完成)将立即断开连接.
是否等待以更清洁的方式关闭ServiceHost?也就是说,我想要禁用服务侦听器,还要等待所有当前连接的客户端完成(或指定最大超时).
原则上,我认为类似以下的事情应该是可能的,尽管我还没有实现它来确认所有细节:
IServiceBehavior在构建服务调度程序运行时时安装包装的调用程序)serviceHost.Close()。| 归档时间: |
|
| 查看次数: |
5197 次 |
| 最近记录: |