0

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;
        }
    }
}

ありがとう

4

1 に答える 1

0

例外 e をキャッチし、後で別の例外をキャッチしますが、元の例外 e をスローします。

これが問題かどうかはわかりませんが、混乱を招く例外が返される可能性があります。

編集

今、私はそれをもう少し注意深く読んだ。

問題は、コンテキストとアドレスの不一致です。コードが netTcpBinding を使用していることがわかります。

  • アドレスが一致することを確認します。CONSTANTS.Protocol の値は?
  • 構成ファイルに競合がないことを確認してください。
于 2010-01-22T11:06:40.983 に答える