gpt4 book ai didi

c# - WCF 初始化代码

转载 作者:太空狗 更新时间:2023-10-30 00:42:03 29 4
gpt4 key购买 nike

我创建了一个 WCF 服务,它从数据库中读取数据并发回结果。出于性能原因,我想在服务启动时缓存表(这发生在 Windows 服务 OnStart 中)。但是 WCF 中没有构造函数这样的东西(对吗?)所以我想到的最好的办法是创建一个 Init() 函数并像下面这样调用它:

protected override void OnStart(string[] args)
{
mServiceHost = new ServiceHost(typeof(DLSService.DLSService), new Uri("http://localhost:8000/DLS"));
mServiceHost.AddServiceEndpoint(typeof(DLSService.IDLSService), new BasicHttpBinding(), "ServicesHost");
((DLSService.DLSService)mServiceHost.SingletonInstance).Init();
mServiceHost.Open();
}

但是使用 SingletonInstance 并转换为正确的类型对我来说似乎并不那么优雅。在 WCF 中是否有更优雅的方法来实现类似构造函数的功能?

最佳答案

推荐的最佳做法是在 WCF 中使用每次调用激活模型并保持服务完全无状态。

意思是:客户端每次发起请求,在服务器端,都会创建一个你的服务实现类的实例,调用请求的服务,然后再次销毁服务类。

因此,将您的初始化代码放入服务实现类构造函数中将是一个非常糟糕的主意 - 它会针对每个请求执行。

你可以做的是有某种逻辑(在你的服务类中,或一些支持代码,例如某种管理界面),将那些你想要缓存的表加载到持久缓存中,例如类似于 AppFabric 缓存。完成后,处理请求的多个服务实例可以使用该公共(public)缓存来获得更好的性能。

关于c# - WCF 初始化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563806/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com