SerialPort経由でSMSメッセージを送信する小さなプログラムがあります。連続して 7 ~ 8 日間うまく機能し、1 日に数百のメッセージを送信します。ただし、メッセージの送信時にハングする場合があり、ハードウェアのリセットのみが解決できます。
問題は、モデムがメッセージ ("> "
文字列を表示) を待っているときに発生し、メッセージを送信しました。モデムがCTRL+Z (ASCII#26)
文字を受信すると、"OK"
. しかし、私はこの応答を受け取ることはなく、それ以降、すべての書き込み試行は . で終了しますSystem.TimeoutException: The write timed out
。例外。
例外をキャッチできますが、問題を解決するために何もできません (ハードウェアのリセットを除く)。最初のタイムアウト例外から、シリアル ポートは機能しません。ハイパーターミナルでも機能しません。2 つの異なるモデムを試す機会がありましたが、どちらも同じ症状を引き起こします。(モデムは違いますが、コンピュータは同じです。) 本番環境のような環境で、別のマシンで 10 日間テストする手段がありません。
シリアル モニタ ソフトウェアを使用しましたが、シリアル ポート (またはモデム) が書き込みタイムアウト エラーを返すことも示されました。シリアル ポートを初期化するときに、WriteTimeout プロパティを 100 (ミリ秒) に設定しました。モデムの製造元によると、ハードウェア ハンドシェイクを使用する必要があります。
私は単純なテキスト メッセージのみを送信します (PDU なし、160 文字以下)。
書き込みタイムアウトとハードウェア ハンドシェイクについて話しているこのスレッドを既に見つけました。書き込みタイムアウト値を上げることはできますが、この問題がたまにしか発生しない理由を知りたいです。そして、これが私の問題であるかどうかを知りたいのですが...
私は C# 4.0 を使用しています。プログラムは Windows 2008 64 ビット サーバーで実行されます。
何か案は?
更新 デニスからのヒントに従って、解決策を見つけました。ウォッチドッグ部分は、タイムアウト例外を検出する自作のソフトウェアです。これが発生すると、プログラムは専用のハードウェアにコマンドを送信して、モデムの電源を切り替えます。最初は、この特殊なハードウェアはリレーカードでしたが、RS-232 または USB または ETHERNET を介して制御できる特別な延長コードを見つけました。(プラグのオンとオフを切り替えます。)