Нужно ли вызывать Close () / Abort () на клиентском прокси-сервере для службы WCF basicHttpBinding? - PullRequest
2 голосов
/ 12 июля 2011

Я могу найти окончательный ответ по этому вопросу. Мне известно о проблеме использования () {} с клиентским прокси. Но у нас есть клиент, который использует все исключения, возвращаемые нашим сервисом, и кажется, что после возникновения исключения клиент больше не может общаться с сервисом (мы не получаем результатов в наших трассировках сервиса). Клиент - это веб-приложение (.NET 3.5). Кто-нибудь испытывал такое поведение?

Вот код клиента:

public static bool ValidateDigitalSignatureCredentials(string barNumber, string PIN)
{

    UserInfo userTicket = JTAC.INcite.Framework.Security.Authentication.CurrentUser;
    DigitalSigning.DigitalSignatureClient client = null;

    bool validSigning = false;

    try
    {
        client = new DigitalSigning.DigitalSignatureClient();
        client.ClientCredentials.UserName.UserName = "foo";
        client.ClientCredentials.UserName.Password = "bar";
        validSigning = client.VerifyCredentials(barNumber, PIN);

        if (client.State != CommunicationState.Faulted)
        {
            client.Close(); // (timeout);
        }
        else
        {
            client.Abort();
        }
    }
    catch (CommunicationException)
    {
        client.Abort();
    }
    catch (TimeoutException)
    {
        client.Abort();
    }

    return validSigning;
}

1 Ответ

0 голосов
/ 12 июля 2011

Некоторые замечания / предложения:

  1. Установите includeExceptionDetailInFaults в значение true в файле конфигурации для службы - это преобразует исключения в FaultException (следует использовать только для отладка ). Он находится в разделе поведений файла конфигурации, в элементе serviceDebug.

  2. Вы можете сохранить некоторый код, сняв флажок CommunicationState в вашем блоке try и просто позвонив:

    client.Close ();

    Если выдается ошибка, блоки catch будут ловить ее и прерывать канал.

  3. Если вы попробуете шаг 1, вы можете добавить еще один блок catch:

    catch (FaultException) { }

  4. Кроме того, я бы добавил (для целей отладки) еще один блок catch для обработки исключения:

    поймать (исключение) { }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...