Msxml2.ServerXMLHTTP.3.0 インスタンスを使用して 1 つ以上のリモート コンピューター/ホスト/エンドポイントにメッセージを送信する、32 ビットのレガシー マルチスレッド C++ Windows サービスがあります。
最近、このサービスを Windows 2008 Standard (32 ビット) OS から Windows 2012 R2 64 ビット OS に移行しました。サービスは引き続き 32 ビット モードで実行されます。
リモート ホストがオンラインであれば問題なく動作することがわかりました。ただし、リモート ホストがオフラインになると、サービスが最終的にクラッシュするまで、メモリとハンドル数が制御不能に増加します。リモート ホストがオンラインになるか、メッセージが他のホストと交換されると、ハンドル カウントとメモリが減少し始め、通常の状態に戻り、1 つのホスト/エンドポイント (リモート コンピューター) がオフラインになると元に戻ります。
また、Windows 2012 での IServerXMLHTTPRequest::Send() メソッドのタイムアウトは、Windows 2008 (200 ミリ秒未満) と比較してはるかに長く (3 ~ 4 秒) かかることも注目されています。同じサービスは Windows 2008 64 ビットでは問題なく動作しますが、Windows 2012 R2 では問題があります。
netstat を見ると、オフライン エンドポイントに対する 2 つの SYN_SENT 要求が表示され、最初の SYN_SENT 状態がタイムアウトするまでに約 3 ~ 4 秒かかります。同じことが2008年にははるかに高速です。
どんなポインタでも大歓迎です。
ありがとう!!