
前提
オンプレサーバからAWSのEC2にシステムを移行しています。
AWSのEC2上でWCFサービスを動かし、社内PCにインストールされたWCFクライアントから接続します。
(エンドポイントのバインド型はBasicHttpBinding)
EC2とクライアントの間にNetwork Load Balancerがあるのですが、NLBは350秒でアイドルタイムアウトが発生するため、長時間セッションだと途中で通信が切られてしまいます。
実現したいこと
AWSのドキュメントに「セッションを維持するためにはアプリケーション側でHello Packetを送るなどの対応が必要です。」とあるのですが、WCF構成エディタを見ても何を設定すれば良いのか分かりません…。
構成ファイル(App.config)に何かを追加すればよいのでしょうか?
構成ファイルではない場合、どのような対応をすれば良いのか教えていただきたいです。
発生している問題・エラーメッセージ
System.Net.WebException: 接続が切断されました: 接続が予期せずに閉じられました。
試したこと
NLB経由ではなく、直接EC2のWCFサービスに接続する形だとエラーは発生しません。
なので、NLBのアイドルタイムアウトな事は間違いなさそうです。
クライアントのレジストリ追加
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
KeepAliveTime 0x000186a0(100000)
KeepAliveInterval 0x000186a0(100000)
→解決しませんでした。
クライアントプログラムに以下のコードを追加
var sp = System.Net.ServicePointManager.FindServicePoint(address.Uri);
sp.SetTcpKeepAlive(true, 30000, 30000);
→解決しませんでした。
KeepAliveをキーワードに対応方法を調査
https://tsmatz.wordpress.com/2009/09/24/wcf/
https://learn.microsoft.com/ja-jp/dotnet/framework/wcf/load-balancing
BasicHttpBinding では、既定で HTTP の KeepAlive の設定がおこなわれている…?
(ではなぜ、切断されるのか…。NLBのログの確認方法を調査中。)
補足情報
VisualStudio2017
.NetFramework4.7.1


回答1件
あなたの回答
tips
プレビュー