1

我已经实现了 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一次。但是现在每次调用methode都是一次又一次ScannedPRX()。我究竟做错了什么?它不仅适用于方法,而且适用于整个班级。

4

2 回答 2

5

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

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

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

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

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

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

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

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

于 2013-04-16T15:01:23.823 回答
2

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

于 2013-04-16T15:01:37.667 回答