WCF で非常に奇妙な問題が発生しています。受信したエンドポイント IP アドレスに到達できない場合、またはサービスがバインドできない場合は、WCF サービスの回復動作を実装する必要があります。アプリケーションがサービスの作成時に例外で失敗した場合、フローは単純です。アプリケーションを終了し、ユーザーに別の IP アドレスを要求し、サービスを作成するための別の試行を実行します。(以下のコード スニペット)。アドレスが有効でない場合、「IP エンドポイント = .121.10.11.11 のリッスン中に TCP エラー (10049: 要求されたアドレスは無効です) が発生しました」例外が発生しますが、何らかの理由で 2 回目の試行を試みると有効なアドレス 前回の試行から間違った IP アドレスで同じ例外が発生しました。コードは次のとおりです。
ServiceHost service = null;
try
{
Uri[] uris = { new Uri(Constants.PROTOCOL + "://" + address + ":" + port) };
service = new ServiceHost(typeof(IRemoteService), uris);
NetTcpBinding tcpBinding =
WcfTcpRemoteServicesManager.LessLimitedNewNetTcpBinding(int.MaxValue,
int.MaxValue, int.MaxValue);
ServiceEndpoint ep = service.AddServiceEndpoint(implementedContract.FullName,
tcpBinding, serviceName);
var throttle =
service.Description.Behaviors.Find<ServiceThrottlingBehavior>();
if (throttle == null)
{
throttle = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = Constants.MAX_CONCURRENT_CALLS,
MaxConcurrentSessions = Constants.MAX_CONCURRENT_SESSIONS,
MaxConcurrentInstances = Constants.MAX_CONCURRENT_INSTANCES
};
service.Description.Behaviors.Add(throttle);
}
service.Open();
}
catch (Exception e)
{
_debugLog.WriteLineMessage(
"Failed to open or create service exception. Exception message:" +
e.Message);
if (service!=null)
{
try
{
service.Close();
}
catch (Exception)
{
service.Abort();
service.Close();
throw e;
}
}
}
ありがとう