C# 如何处理WCF服务中的静态方法?

C# 如何处理WCF服务中的静态方法?,c#,wcf,static,singleton,C#,Wcf,Static,Singleton,我是WCF的初学者。我正在尝试使设备驱动程序网络可访问。 我现在拥有的代码,简化了: A.C Driver.cs DllImport.cs 这个司机对我来说工作得很好。在控制设备的示例中,我只需添加对该驱动程序的引用,并使用驱动程序的方法控制设备 MyService d = Driver.OpenDevice(0); d.ControlDevice(); 我的工作是远程访问这个驱动程序,我选择使用WCF 因为,我已经有了实现,我提取了一个接口,并通过放置OperationContracts和适

我是WCF的初学者。我正在尝试使设备驱动程序网络可访问。 我现在拥有的代码,简化了:

A.C Driver.cs DllImport.cs 这个司机对我来说工作得很好。在控制设备的示例中,我只需添加对该驱动程序的引用,并使用驱动程序的方法控制设备

MyService d = Driver.OpenDevice(0);
d.ControlDevice();
我的工作是远程访问这个驱动程序,我选择使用WCF

因为,我已经有了实现,我提取了一个接口,并通过放置OperationContracts和适当的位置将其转换为有效的WCF服务契约。此提取接口没有OpenDevice和GetDeviceNumber方法,因为它们是静态的


我遇到的问题是:

1) 打开WSDL文件告诉我在客户端中使用如下代码:

MyServiceClient client = new MyServiceClient();
// access client operations
// close client
client.Close();
这是什么
MyServiceReference.MyServiceClient
MyServiceReference
是我添加到客户端的服务引用的名称)?为什么它要调用服务器上MyService类的私有构造函数

2) 我如何在客户机中执行类似操作

MyServiceReference.Driver d = MyServiceRefernce.Driver.OpenDevice(0);
我读过有关InstanceContextMode的文章,但不确定如何在我的情况下使用它

我明白很难准确理解我的要求,但我也很难解释!我希望我身边有一个熟悉WCF的人



我使用的实际驱动程序源位于中的Assembly文件夹中。

通常WCF没有会话,因此所有调用都是相互独立的。因此,您应该将驱动程序函数封装到可服务的方法中。因此,有一种方法将为设备的一个工作单元提供服务,在每次调用时打开->执行工作->关闭。

通常WCF没有会话,因此所有调用都是相互独立的。因此,您应该将驱动程序函数封装到可服务的方法中。因此,有一种方法将为设备的一个工作单元提供服务,在每次调用时,该工作单元将被打开->执行工作->关闭。

通过将服务类设置为singleton,您不会使WCF服务使用单个实例。您需要配置WCF服务,使其仅使用单个实例。您还可以创建基于会话的WCF服务。例如,请参见。

通过将服务类设置为singleton,您无法使WCF服务使用单个实例。您需要配置WCF服务,使其仅使用单个实例。您还可以创建基于会话的WCF服务。例如,请参见。

谢谢。这个例子很好。我将代码从静态方法
CreateInstance
移动到私有构造函数(它是一个单例类)并使用-SessionMode:Required,InstanceManagement:Single,Concurrency:Reentrant。谢谢。这个例子很好。我将代码从静态方法
CreateInstance
移动到私有构造函数(它是一个单例类)并使用-SessionMode:Required,InstanceManagement:Single,Concurrency:Reentrant。我最终使用了会话。谢谢你的回答:)我最终使用了会话。谢谢你的回答:)
MyService d = Driver.OpenDevice(0);
d.ControlDevice();
MyServiceClient client = new MyServiceClient();
// access client operations
// close client
client.Close();
MyServiceReference.Driver d = MyServiceRefernce.Driver.OpenDevice(0);