基于WinForm的WCF应用
老赵 2009-06-04 01:01:15 我现在搞这么一个项目:
机房里只有一台服务器,连接十几台工业设备(串口、网口)。服务器需要定时获取设备信息,并且控制设备。
操作人员在办公室,通过网络连接到服务器上。设备的信息需要实时的传递给操作人员的桌面电脑,操作人员还需要根据实际情况,给设备下命令,来控制设备。
我现在希望使用WCF技术。服务器上有个WinForm应用程序,提供WCF服务。WinForm应用程序来和硬件设备打交道,然后通过WCF向连接上的客户端广播设备信息。客户端通过WCF,上传对设备的操作指令。
我现在碰见的问题是:
1.网上大多的例子,WCF的服务是控制台应用。但是如果是控制台应用的服务的话,就没法和硬件设备设备打交道。因为对设备的编程中会用到ActiveX控件,还会用到定时器。用户也希望在服务器端有一定的界面显示。
2.如果不用控制台应用的话,使用WinForm应用来提供WCF服务,服务可以启动。但是WinForm中,没法调用服务中的广播,发送,接收等服务,只能看到一个ServiceHost实例。
下面的例子说明:
[ServiceContract(SessionMode = SessionMode.Required,CallbackContract = typeof(ICisdiServiceCallback))]
public interface ICisdiService
{
[OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = false)]
string[] Connect(string name);
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
void Send(string msg);
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
void SendTo(string to, string msg);
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
void Disconnect();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class CisdiService : ICisdiService
{
public string[] Connect(string name){...}
public void Send(string msg){...}
public void SendTo(string to, string msg){...}
public void Disconnect(){...}
public void BroadcastMessage(CisdiEventArgs e){...}
}
public partial class FrmMain : Form
{
ServiceHost host;
public FrmMain()
{
host = new ServiceHost(typeof(CisdiServer.CisdiService));
host.Open();
}
private void timerParkingPlace_Tick(object sender, EventArgs e)
{
//在此形成需要广播的消息,但是看不到host中的广播方法,也看不到其他的服务方法,如Send等
//BroadcastMessage(e1);
}
}
有没有DX帮忙指点一下。