基于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帮忙指点一下。
...全文
230 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangqinggao 2009-06-22
  • 打赏
  • 举报
回复
,m,,
老赵 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xwdd129 的回复:]
你理解有误,服务并不等于应用程序,无论winform还是控制台,只是给服务提供一个宿主!

对串口、网口的控制都可以在服务里实现,如果你非要在Winform里进行控制,你可以通过回调调用Form的方法!
[/Quote]

定时器和线程也能放在控制台应用吗?
周药师 2009-06-04
  • 打赏
  • 举报
回复
up
xwdd129 2009-06-04
  • 打赏
  • 举报
回复
你理解有误,服务并不等于应用程序,无论winform还是控制台,只是给服务提供一个宿主!

对串口、网口的控制都可以在服务里实现,如果你非要在Winform里进行控制,你可以通过回调调用Form的方法!

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧