是否可以将串行端口控件添加到Web应用程序。我已尝试以编程方式创建一个,但我遇到了端口保持打开的问题。我不知道如何解决这个问题,除非通过某种方式在网页上添加串口控件。关于如何完成这项任务的任何想法?提前谢谢。
以下是我目前的代码:
public partial class LoadCellTest : System.Web.UI.Page
{
SerialPort serialPort1 = new SerialPort("COM3",9600,Parity.None,8,StopBits.One);
protected void Page_Load(object sender, EventArgs e)
{
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.ErrorReceived += new SerialErrorReceivedEventHandler(serialPort1_ErrorReceived);
}
delegate void SerialDataReceivedDelegate(object sender, SerialDataReceivedEventArgs e);
delegate void SerialErrorReceivedDelegate(object sender, SerialErrorReceivedEventArgs e);
protected void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
TextBox1.Text = (serialPort1.ReadExisting());
if (serialPort1.ReadExisting().Length == 0)
{
ListBox1.Items.Insert(0, TextBox1.Text);
TextBox1.Text = "";
}
}
protected void button1_Click(object sender, EventArgs e)
{
try
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
button1.Text = "Start";
}
else
{
serialPort1.Open();
button1.Text = "Stop";
}
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:3)
您的代码只是访问服务器的串口,因为它在服务器上运行...
如果您确实需要从Web应用程序访问客户端上的串行端口,那么您将需要使用一些直接在客户端上运行的技术...这可能是嵌入到您的网页中的ActiveX控件...
我真的不确定嵌入到您网页中的Silverlight应用程序是否也可以实现这一目标......
请注意,在网页中这样做可能是一个安全问题!
答案 1 :(得分:3)
将我的评论转化为答案......
串口代码是服务器端代码。你无法在客户端上使用ASP.NET。
创建ActiveX或其他胖客户端控件是一项工作,并不是一个好主意。
我的建议是继续使用WinForms应用程序来获取需要扫描程序的代码,并为其添加一个菜单,以便为报告/数据访问启动单独的ASP.NET Web应用程序。
如果您想让用户更加“无缝”,您可以添加一个带有WebBrowser控件的表单来加载您的报表/数据访问站点。对他们而言,它只是“应用程序的一部分”。
这意味着,根据您连接到端口的设备,可能会有一个更简单的选项。
我们的一款条码扫描仪附带的软件只需扫描条形码数据,并将其粘贴到任何打开的文档中。如果您在记事本中工作,扫描的数据将粘贴到记事本中。如果您打开了一个Web应用程序,并且光标位于文本框中,则数据只会粘贴在那里。
这是一个更简单的选项来实现,但它对用户来说更难,因为如果他们不是技术人员,他们会打电话给你,想知道为什么条形码会发出哔哔但不填充文本框。 (答案是“因为你的光标不在文本框中,或者表格没有焦点”)
所以我回到推荐#1。