[英]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.