WCF接口:为什么不't 'just'关注方法,而不是整个班级
本文关键字:为什么不 接口 just WCF 方法 | 更新日期: 2023-09-27 18:09:33
我已经实现了WCF服务,连接工作正常。我用BasicHttpBinding
。
[ServiceContract]
public interface IScannerInput
{
[OperationContract]
string ScannedPRX(string barcode, string user, int color);
}
public class ProcessPRX : IScannerInput
{
ProcessClass c = new ProcessClass(); // every time a call ScannedPRX() this class is made again
public string ScannedPRX(string barcode, string user, int color)
{
c.PrxScannedInput(barcode, user, color);
return "Bussy processing: " + barcode;
}
}
在一个正常的班级里,我只能做一次ProcessClass c
。但是现在每次调用ScannedPRX()
方法都要一次又一次地重复。我做错了什么?这不仅仅是针对方法,而是针对整个班级。
有三种实例化WCF服务对象的方法:
-
PerCall:为每个客户端请求创建一个新的InstanceContext(因此是服务对象)。
-
session:为每个新的客户端会话创建一个新的InstanceContext(因此是服务对象),并在该会话的生命周期内维护(这需要一个支持会话的绑定)。
-
Single:在应用程序的生命周期内,单个InstanceContext(因此也是服务对象)处理所有客户端请求。
PerCall是默认的,这就是你正在使用的。
如果你想要其他行为,请阅读下面的文章。
http://msdn.microsoft.com/en-us/library/ms731193.aspx考虑并发请求的服务,如果你选择实例单实例化模式,你需要注意你自己的所有方法是线程安全的。
因为WCF服务的默认实例化行为是为每个调用创建一个新实例。您通常希望这样做来避免在服务的不同调用者之间共享状态,或者避免同一客户机的多个调用。除非创建ProcessClass的成本很高,或者需要在调用之间维护状态,否则我会坚持使用这个模型。