C# WCF Windows服务带有指向Windows窗体客户端的API,API返回值告诉我它无法连接到设备。什么是首选方式?
我有一个WCF windows服务,它向windows窗体应用程序公开API 与客户端的API连接:C# WCF Windows服务带有指向Windows窗体客户端的API,API返回值告诉我它无法连接到设备。什么是首选方式?,c#,serial-port,C#,Serial Port,我有一个WCF windows服务,它向windows窗体应用程序公开API 与客户端的API连接: var serviceType = typeof(Mail2SmsServerApi); var uri = new Uri("http://localhost:8000/"); host = new ServiceHost(serviceType, new[] { uri }); var beh
var serviceType = typeof(Mail2SmsServerApi);
var uri = new Uri("http://localhost:8000/");
host = new ServiceHost(serviceType, new[] { uri });
var behaviour = new ServiceMetadataBehavior() { HttpGetEnabled = true };
host.Description.Behaviors.Add(behaviour);
host.AddServiceEndpoint(serviceType, new BasicHttpBinding(), "Hello");
host.AddServiceEndpoint(typeof(IMetadataExchange), new BasicHttpBinding(), "mex");
host.Open();
我的服务合同:
[ServiceContract]
public class Mail2SmsServerApi
{
[OperationContract]
public string Imei()
{
try
{
GSMHandler gsm = new GSMHandler();
return gsm.GetImei();
}
catch (Exception ex)
{
LogText.Error("API GetImei(), exception: " + ex.ToString());
return null;
}
}
}
我的GSMHandler类和方法:
public bool OpenConnection()
{
modem = new GsmPhone(_comport, _baudrate, _timeout);
if (!comm.IsConnected())
{
try
{
modem.Open();
return true;
}
catch (Exception ex)
{
LogText.Debug("OpenConnection(), exception" + ex.ToString());
return false;
}
}
else
{
try
{
modem.Close();
modem.Open();
return true;
}
catch (Exception ex)
{
LogText.Debug("OpenConnection(), exception" + ex.ToString());
return false;
}
}
}
public string GetImei()
{
string imei = "";
try
{
imei = modem.RequestSerialNumber();
LogText.Debug("IMEI:" + _IMEI);
return imei;
}
catch (Exception ex)
{
LogText.Error("Error caught in GetImei(), exception: " + ex.ToString());
return imei;
}
}
调用我的服务中的OnStart方法时,我正在使用以下命令打开与调制解调器的连接:
gsm = new GSMHandler();
gsm.OpenConnection();
调用OnStop时,我将使用以下命令停止它:
gsm = new GSMHandler();
gsm.OpenConnection();
我的想法是,通过这种设计,服务将处理通信,客户端和服务可以与调制解调器交互,而不会出现com端口未打开或com端口繁忙的问题。这显然是错误的,因为我无法通过这种方式从调制解调器返回值。这一定是我的设计失误
我试图实现的是,客户端可以通过服务与调制解调器通信,而不是两者都直接连接到调制解调器。但该服务可以处理打开和关闭与调制解调器的连接,并将命令从客户端传递到调制解调器
所以我的问题是,设计这样一个场景的合适方式是什么?我不是问代码,只是问它通常是如何设计的
我很感激所有的答案:)提前谢谢 如果您将与调制解调器的交互作为单个工作单元来执行,我认为您可能会取得更大的成功 例如,设计服务,使调用方调用单个方法来发送文本消息,并在接口调用中提供所有必要的细节 然后,服务方法在单个工作单元中执行打开调制解调器、发送文本消息和关闭调制解调器所需的所有任务 此设计将允许您确保调制解调器始终在工作单元内正确、完全地打开和关闭,而不是通过服务等待可能永远不会到达的其他命令
此外,此设计将允许您最终正确支持多个调制解调器,而您当前的设计不会支持多个调制解调器。您可以拥有一个调制解调器池,当新请求到达时,您可以从该池中获得一个可用的调制解调器,执行工作单元,然后在完成时将调制解调器返回到该池,即使在出现故障的情况下。从客户端读取imei和调制解调器的信号强度,这是通过计时器完成的。该服务将发送短信。因此,在未知时间,客户端和服务都会发生不同的工作。我不认为这对我有帮助?还是我想错了?