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接口:为什么不't 'just'关注方法,而不是整个班级

有三种实例化WCF服务对象的方法:

  • PerCall:为每个客户端请求创建一个新的InstanceContext(因此是服务对象)。

  • session:为每个新的客户端会话创建一个新的InstanceContext(因此是服务对象),并在该会话的生命周期内维护(这需要一个支持会话的绑定)。

  • Single:在应用程序的生命周期内,单个InstanceContext(因此也是服务对象)处理所有客户端请求。

PerCall是默认的,这就是你正在使用的。

如果你想要其他行为,请阅读下面的文章。

http://msdn.microsoft.com/en-us/library/ms731193.aspx

考虑并发请求的服务,如果你选择实例单实例化模式,你需要注意你自己的所有方法是线程安全的。

因为WCF服务的默认实例化行为是为每个调用创建一个新实例。您通常希望这样做来避免在服务的不同调用者之间共享状态,或者避免同一客户机的多个调用。除非创建ProcessClass的成本很高,或者需要在调用之间维护状态,否则我会坚持使用这个模型。