如何设置此COM端口?

时间:2014-05-29 11:25:53

标签: c# exception serial-port

我有一个Windows服务,用于侦听来自GSM调制解调器的传入文本的COM端口,然后将该消息插入SQL数据库。

我告诉我的服务部门在我的服务器上记录文本文件的任何异常,显然它一直在抛出一个异常,说明所请求的资源正在使用中。

我认为这与COM端口有关,但是,我无法看到我出错的地方,并且我想了解如何释放COM端口并启用我的代码正常运行,我的代码如下,任何和所有帮助将不胜感激。

我使用名为GSMComm的第三方库来实现这一目标。

private SmsServer server;
private string appDataDirectory;
private string logFilePath;
GsmCommMain Comm = new GsmCommMain("COM7",9600,300);
GsmPhone GSM = new GsmPhone("COM7", 115200, 30000);

private void SMSGetter()
{      
    Log("Getter Fired");

    //var message = GSM.ReadMessage(4);
    //GSM.ReadMessage(4);
    //TcpClientChannel client = new TcpClientChannel();
    //ChannelServices.RegisterChannel(client, false);
    //string url = "192.168.100.67:2000";
    //ISmsSender smssender = (ISmsSender)Activator.GetObject(typeof(ISmsSender), url);

    try
    {
        if (GSM.IsOpen()==false && Comm.IsOpen()==false)
        {
            GSM.Open();
            Comm.Open();
            DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
            SqlConnection Conn = new SqlConnection("Data Source=tcp:crusader,49172;Initial Catalog=HermesSMS;User ID=admin;Password=w");
            SqlCommand com = new SqlCommand();
            com.Connection = Conn;
            Conn.Open();
            com.CommandText = ("INSERT INTO SMSArchives(ID,Message,Blacklist) VALUES ('" + messages + "', 'Yes')");
            com.ExecuteNonQuery();
            Conn.Close();
            GSM.Close();
            Comm.Close();
            return;
        }
        else if (GSM.IsOpen()==true && Comm.IsOpen()==true)
        { 
            DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
            SqlConnection Conn = new SqlConnection("Data Source=tcp:crusader,49172;Initial Catalog=HermesSMS;User ID=admin;Password=w");
            SqlCommand com = new SqlCommand();
            com.Connection = Conn;
            Conn.Open();
            com.CommandText = ("INSERT INTO SMSArchives(ID,Message,Blacklist) VALUES ('" + messages + "', 'Yes')");
            com.ExecuteNonQuery();
            Conn.Close();
            GSM.Close();
            return;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

代码尝试两次打开COM7。

答案 1 :(得分:1)

通常,您无法在共享模式下打开COM端口,因此无法打开COM7两次,这就是异常的原因。

即使出于某种原因,您可以使用两个手柄打开相同的COM端口,但您指定了两个波特率,这意味着一个流或另一个流将显示为您的服务损坏。

您需要选择一个或另一个并通过单个管道流式传输所有数据。我不知道您的系统是如何工作的,但您需要阅读文档或联系供应商以了解您应该如何获取数据。

可能的解决方法是简单地从代码中删除所有GSM.xxx()调用 - 看起来您只是打开和关闭该资源,但它从未在您的代码中用于获取任何数据。