c# 服务程序和普通程序有什么不同?

talqaedak 2018-04-22 09:28:49
要写一个跟第三方软件iFix通讯的功能,引用FixDataSystem,和microsoft.VisualBasic.
下面这段代码在窗口程序和Console程序里都能正常运行,但是写到服务程序里,就无法运行,调试跟踪是在groups.Add("G1");这句,服务程序就崩溃了,哪位大侠帮忙看看什么原因?怎么修改?


String ifix_label;
IFixDataSystem FDS = Interaction.CreateObject("FixDataSystems.Intellution FD Data System Control", "") as FixDataSystems.IFixDataSystem;

IFixDataServerCollection dataServerCollection = FDS.DataServers as FixDataSystems.IFixDataServerCollection;
Groups groups = FDS.Groups as FixDataSystems.Groups;

groups.Add("G1");
FixDataSystems.Group group = groups["G1"] as FixDataSystems.Group;

FixDataSystems.DataItems dataItems = group.DataItems as FixDataSystems.DataItems;

dataItems.Add(ifix_label);

FixDataSystems.DataItem dataitem1 = dataItems[ifix_label] as FixDataSystems.DataItem;
dataitem1.Value = 12;
group.Write();
...全文
1077 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 talqaedak 的回复:
界面肯定是没有的,然后启动超时问题,应该也不是,因为我在别的程序段调用,触发执行这段时候,也报错。
凡是服务里使用就不能启动? 从 window7开始,许多窗口程序中可用的机制都不能在服务会话下使用,这是“正常”的。 你应该让这个COM组件的提供商输出更多更详细的日志,起码能看出更加具体的提示信息。 最好是换做比较校准、靠谱的 .net 组件,特别是 .net framework 内部的现成的机制来编程,这样自己能把握一点点技术。
yanghao1 2018-05-10
  • 打赏
  • 举报
回复
服务器程序是在服务器端运行的程序,只把应该让外部知道的结果送出去。
hiauok 2018-04-27
  • 打赏
  • 举报
回复
用委托或是异步试试,估计是在添时 别的地方在正使用
assky124 2018-04-24
  • 打赏
  • 举报
回复
引用 4 楼 wddw1986 的回复:
OnStart方法有超时的,超时了不返回就认为服务启动失败了
检查启动是否超时。然后看看你的第三方库是否有界面,服务一般不能有界面
talqaedak 2018-04-24
  • 打赏
  • 举报
回复
引用 10 楼 assky124 的回复:
[quote=引用 4 楼 wddw1986 的回复:] OnStart方法有超时的,超时了不返回就认为服务启动失败了
检查启动是否超时。然后看看你的第三方库是否有界面,服务一般不能有界面[/quote] 界面肯定是没有的,然后启动超时问题,应该也不是,因为我在别的程序段调用,触发执行这段时候,也报错。
正怒月神 2018-04-23
  • 打赏
  • 举报
回复
报什么错。
exception92 2018-04-23
  • 打赏
  • 举报
回复
没贴出错误,再贴代码也无济于事的。在windows日志中检查看看是否有错误记录。
talqaedak 2018-04-23
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
没贴出错误,再贴代码也无济于事的。在windows日志中检查看看是否有错误记录。






  • 打赏
  • 举报
回复
贴出“崩溃”的日志来。
talqaedak 2018-04-23
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
贴出“崩溃”的日志来。
2018/4/23 8:03:46System.Runtime.InteropServices.COMException (0x8004518A): 异常来自 HRESULT:0x8004518A 在 FixDataSystems.IFixDataItemCollection.Add(String bstrName) 在 CowBoy_SocketServer.CowBoy_SocketServer.scada_read(String ifix_label)
cheng2005 2018-04-23
  • 打赏
  • 举报
回复
OnStart方法有超时的,超时了不返回就认为服务启动失败了
talqaedak 2018-04-23
  • 打赏
  • 举报
回复
protected override void OnStart(string[] args)
        {
            server = new AsyncTcpServer(9010);
            server.Encoding = Encoding.Unicode;
            server.ClientConnected +=
              new EventHandler<TcpClientConnectedEventArgs>(server_ClientConnected);
            server.ClientDisconnected +=
              new EventHandler<TcpClientDisconnectedEventArgs>(server_ClientDisconnected);
            server.PlaintextReceived +=
              new EventHandler<TcpDatagramReceivedEventArgs<byte[]>>(server_PlaintextReceived);
            
            server.Start();
            MSGHandler("TCP server has been started."+ server.Port+" \r\n", 100);
            scada_read("Fix32.ML.T1.F_CV");
            
        }
public void scada_read(string ifix_label)
        {
            //读取iFix变量
            //MSGHandler("12343241"+" \r\n", 100);
            IFixDataSystem FDS = Interaction.CreateObject("FixDataSystems.Intellution FD Data System Control", "") as FixDataSystems.IFixDataSystem;
            IFixDataServerCollection dataServerCollection = FDS.DataServers as FixDataSystems.IFixDataServerCollection;
            Groups groups = FDS.Groups as FixDataSystems.Groups;
            
            groups.Add("1");
            FixDataSystems.Group group = groups["1"] as FixDataSystems.Group;
             
            FixDataSystems.DataItems dataItems = group.DataItems as FixDataSystems.DataItems;
            //MSGHandler(ifix_label+" \r\n", 100);
            dataItems.Add(ifix_label);

            FixDataSystems.DataItem dataitem1 = dataItems[ifix_label] as FixDataSystems.DataItem;
            dataitem1.Value = 12;
            group.Write();
            //MSGHandler(dataitem1.Value+" \r\n", 100);
        }
talqaedak 2018-04-23
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
没什么不同,区别是服务是windows调用的,所以有一些约定,比如需要start stop方法
你好,我是在OnStart()里调用这段代码,我在窗口程序和Console程序里都试过,能正常运行,只有服务程序,造成运行这段,服务直接崩溃。
threenewbee 2018-04-22
  • 打赏
  • 举报
回复
没什么不同,区别是服务是windows调用的,所以有一些约定,比如需要start stop方法

110,536

社区成员

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

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

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