C# を使用してサーバー側の処理と動的に制御される Web ページを実行する ASP Web ページを含む .NET アプリケーションがあります。質問が焦点を当てている部分は、提出されているフォームです。送信されたフォームは、Perl スクリプトに渡されて処理されます。ただし、ユーザーがプロセスを表示して確認またはキャンセルする必要がある競合が発生する場合があります。そのため、Perl スクリプトは C# クラスと対話して、Web ページを介してユーザーにプロンプトを表示し、データを検証して確認する必要があります。これにより、C# は確認を Perl スクリプトに送信して続行します。
現時点では、プロジェクトは Perl スクリプトを呼び出すことができ、完了するとユーザーに表示される応答を返します。Perl スクリプトを実行して、Web ページ上でユーザーに定期的に通信できるようにしたいと考えています。これは可能ですか?
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 スクリプトが実行された後、応答が Web ページに非同期で返され、ライトボックス ウィンドウが起動されます。
<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>
どうもありがとう!