wcf界面:为什么它不是'只是'去方法而是全班

Ann*_*paz 1 c# wcf interface

我实现了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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在正常的课程中,我可以做ProcessClass c一次.但现在每次调用方法时都会反复出现ScannedPRX().我究竟做错了什么?它不仅仅是针对方法而是针对整个班级.

vit*_*ore 5

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

  • PerCall:为每个客户端请求创建一个新的InstanceContext(以及服务对象).

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

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

PerCall是默认的,这就是你所拥有的.

如果您想要其他行为,请阅读以下文章.

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

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