繁体   English   中英

WCF接口:为什么不“只是”转到方法而是整个类

[英]wcf interface: why doesn't it 'just' go to the methode but to the whole class

我已经实现了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()都会一次又一次地将其ScannedPRX() 我究竟做错了什么? 它不仅涉及方法,而且涉及整个类。

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

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

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

  • 单个:单个InstanceContext(以及相应的服务对象)在应用程序的生命周期内处理所有客户端请求。

PerCall是默认设置,这就是您所拥有的。

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

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

考虑到对服务的并发请求,就好像您选择的是单实例化模式一样,您需要自己注意所有方法都是线程安全的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM