我有一个带有 ASP 网页的 .NET 应用程序,该网页使用 C# 进行服务器端处理和动态控制的网页。问题关注的部分是正在提交的表单。然后将提交的表单交给 Perl 脚本进行处理。但在某些情况下,当存在需要用户查看并确认或取消该过程的冲突时。因此,Perl 脚本需要与 C# 类对话,通过网页提示用户验证数据并确认,然后 C# 将确认发送到 Perl 脚本以继续。
截至目前,该项目可以调用 Perl 脚本,并在完成后返回一个显示给用户的响应。我希望能够通过运行 Perl 脚本定期与网页上的用户进行通信。这可能吗?
我查看了 Win32::API,但我不确定这是否是正确的路线。
这是我目前从 C# 调用 Perl 脚本的方式:
ProcessStartInfo perlStartInfo = new ProcessStartInfo(@"C:\Perl64\bin\perl.exe");
perlStartInfo = new ProcessStartInfo(@"C:\usr\bin\perl.exe");
perlStartInfo.Arguments = "\"" + webAppPath + "ccrmiddleman.pl\" -action submit -date " + Date1.Text;
perlStartInfo.UseShellExecute = false;
perlStartInfo.RedirectStandardOutput = true;
perlStartInfo.RedirectStandardError = true;
perlStartInfo.CreateNoWindow = false;
Process perl = new Process();
perl.StartInfo = perlStartInfo;
perl.Start();
StdOut.Text = perl.StandardOutput.ReadToEnd();
StdErr.Text = perl.StandardError.ReadToEnd();
perl.WaitForExit(60);enter code here
当提交 Web 表单并执行此 Perl 脚本后,它会将响应异步发送回网页以启动灯箱窗口。
<form id="form1" runat="server"><!--div-->
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Label ID="LabelDate1" runat="server" Text="Date"></asp:Label>
<asp:Button ID="SubmitBtn" runat="server" Text="Submit" OnClick="SubmitBtn_Click" />
<asp:Button ID="ClearBtn" runat="server" Text="Clear" UseSubmitBehavior="false" CausesValidation="false" OnClientClick="return CleanForm();" />
<asp:RegularExpressionValidator ID="Date1Validator" runat="server" ControlToValidate="Date1" ValidationExpression="\d\d/\d\d/\d\d" ErrorMessage="Please enter valid date."></asp:RegularExpressionValidator>
<asp:CalendarExtender ID="CalendarExtender1" CssClass="input" runat="server" TargetControlID="Date1" TodaysDateFormat="MMMM d, yyyy" Format="MM/dd/yy" OnClientDateSelectionChanged="callserver"></asp:CalendarExtender>
<asp:FilteredTextBoxExtender ID="DateFilter" runat="server" TargetControlID="Date1" FilterType="Custom, Numbers" ValidChars="/" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div id="light" class="white_content"><asp:Label ID="lbText" runat="server" Text="Label"></asp:Label><br /><br /><a href = "javascript:void(0)" onclick = "document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'">Close</a></div>
<div id="fade" class="black_overlay"></div>
<DBWC:DynamicControlsPlaceholder ID="PlaceHolder" runat="server" ControlsWithoutIDs="DontPersist"></DBWC:DynamicControlsPlaceholder>
<asp:Literal ID="LiteralJS" runat="server" Visible="false"></asp:Literal>
<asp:Label ID="ccrTitle" runat="server"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="CalendarUpdateBtn" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="SubmitBtn" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="ClearBtn" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<!--/div-->
</form>
非常感谢!