WCF отправляет то же исключение, даже если адрес конечной точки службы действителен - PullRequest
0 голосов
/ 21 января 2010

У меня действительно странная проблема с WCF. Мне нужно реализовать некоторые способы восстановления для службы WCF, если не получен IP-адрес конечной точки или служба не может выполнить привязку. Эта процедура проста, если приложение завершается с ошибкой при создании службы, оно завершает его, запрашивает у пользователя другой IP-адрес и выполняет еще одну попытку создания службы. (Фрагмент кода ниже). Если адрес недействителен, я получаю сообщение об ошибке «Ошибка TCP (10049: запрошенный адрес недопустим в своем контексте) во время прослушивания исключения IP Endpoint = .121.10.11.11», но по любой причине, если я попытаюсь вторую попытку с действительный адрес У меня такое же исключение с неправильным 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;
        }
    }
}

Спасибо

1 Ответ

0 голосов
/ 22 января 2010

Вы ловите исключение e, затем позже вы ловите другое исключение, но вы бросаете исходное исключение e.

Не уверен, что это ваша проблема, но это может привести к тому, что вы получите запутанное исключение.

EDIT

Теперь я прочитал это немного более внимательно.

Проблема в несоответствии контекста и адреса. Я вижу, что код использует netTcpBinding:

  • Убедитесь, что адрес совпадает, каково значение CONSTANTS.Protocol?
  • Убедитесь, что в файлах конфигурации нет конфликтов.
...