C# 如何设置此COM端口?
我有一个windows服务,它可以在COM端口上侦听来自GSM调制解调器的传入文本,然后将该消息插入SQL数据库 我已经告诉我的服务在我的服务器上记录文本文件的任何异常,显然它一直抛出一个异常,说请求的资源正在使用 我假设这与COM端口有关,但是,我看不出哪里出了问题,我希望获得一些关于如何释放COM端口并使我的代码正常工作的指导,我的代码如下,任何和所有帮助都将不胜感激 我正在使用第三方库GSMComm来实现这一点C# 如何设置此COM端口?,c#,exception,serial-port,C#,Exception,Serial Port,我有一个windows服务,它可以在COM端口上侦听来自GSM调制解调器的传入文本,然后将该消息插入SQL数据库 我已经告诉我的服务在我的服务器上记录文本文件的任何异常,显然它一直抛出一个异常,说请求的资源正在使用 我假设这与COM端口有关,但是,我看不出哪里出了问题,我希望获得一些关于如何释放COM端口并使我的代码正常工作的指导,我的代码如下,任何和所有帮助都将不胜感激 我正在使用第三方库GSMComm来实现这一点 private SmsServer server; private strin
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;
}
}
}
代码尝试打开COM7两次。通常无法在共享模式下打开COM端口,因此无法打开COM7两次,这就是出现异常的原因 即使出于某种原因,您可以使用两个句柄打开同一个COM端口,但指定了两个波特率,这意味着一个流或另一个流将显示为您的服务已损坏 您需要选择其中一个,并通过单个管道传输所有数据。我不知道您的系统打算如何工作,但您需要阅读文档或与供应商联系,了解您应该如何获取数据
一个可能的修复方法是简单地从代码中删除所有GSM.xxx()调用-看起来您只是打开和关闭该资源,但它从未在代码中用于获取任何数据。正如它所预期的那样;GSM调制解调器在COM7上,这两种方法都需要使用COM7作为端口名。如果这就是问题所在,我如何解决这种冲突?谢谢普雷斯顿,我实际上并不知道!