C# WCF serviceType作为单例实例 我创建了一个Windows通信基础服务(在本例中是一个Windows窗体应用程序),将其Service Type类初始化为一个单独的:
开始服务工作。从客户那里打电话是有效的。但是,如果服务使用上述代码(“//对服务进行第一次调用?”)对自身进行调用,则会得到System.TimeoutExceptionC# WCF serviceType作为单例实例 我创建了一个Windows通信基础服务(在本例中是一个Windows窗体应用程序),将其Service Type类初始化为一个单独的:,c#,wcf,singleton,appdomain,C#,Wcf,Singleton,Appdomain,开始服务工作。从客户那里打电话是有效的。但是,如果服务使用上述代码(“//对服务进行第一次调用?”)对自身进行调用,则会得到System.TimeoutException private static myDataService.DataProvider.CustomSingletonClass obs; public DataProviderServiceType() { //Create the object if needed. This should only be req
private static myDataService.DataProvider.CustomSingletonClass obs;
public DataProviderServiceType()
{
//Create the object if needed. This should only be required first time.
if (obs == null)
{
obs = new myDataService.DataProvider.CustomSingletonClass();
//Instruct the class to read its configuration and initialize.
obs.initializeSingletonClass(null);
}
}
singleton类有一个计时器对象,它将在初始化时启动。因此,一旦客户机对服务进行了调用,类就被实例化,计时器被启动,对象将继续存在,其计时器对象将定期触发
对于上下文,计时器的事件将更新单例的属性。其目的是让singleton类定期执行计算,将数据保存在其属性中,并将属性中的任何内容返回给调用客户端。
通过这种方式,执行定期(基于时间的)计算的调用受到限制,所有客户端都会收到相同的更新数据
问题是,一旦托管了服务,就只需要一个客户端调用要创建的singleton实例并启动计时器
SetListText("Starting Service...");
host_DataService = new ServiceHost(serviceType_Data);
host_DataService.Open();
SetListText("Service is now available.");
我希望服务通过一个调用初始化singleton类,这样第一个发出请求的客户端就不必等待配置和初始化的发生;程序启动时要刷新的数据。
在“SetListText(“服务现在可用”);“我有以下内容:
//Make the 1st call to the service?
EndpointAddress endpointAddress = new EndpointAddress("http://localhost:8000/myDataService/DataProvider/TimedCalculator");
BasicHttpBinding serviceBinding = new BasicHttpBinding();
serviceBinding.CloseTimeout = new TimeSpan(0, 1, 0);
serviceBinding.OpenTimeout = new TimeSpan(0, 1, 0);
serviceBinding.ReceiveTimeout = new TimeSpan(0, 10, 0);
serviceBinding.SendTimeout = new TimeSpan(0, 1, 0);
DataProviderClient client = new DataProviderClient (serviceBinding, endpointAddress);
String[][] ArrStr = client.retrieveList();
有没有办法让WCF服务在同一appDomain中调用自身,或者这是合理不可取的?
是否有理由放弃这个自呼代码,只接受第一个客户的服务呼叫?我会做一些不同的事情。试试这个:
- 使用单例WCF服务删除
- 使用企业库进行缓存
- 在您的WCF服务中,检查缓存中的数据是否足够新,如果足够新,则返回数据,如果没有,则获取/重新计算数据
- 创建以特定时间间隔轮询WCF服务的windows服务
- windows服务调用重新缓存数据服务
- 您使用的不是windows服务而是缓存代理产品