Подтвердить что ты не робот

Вызов EWS с использованием Managed API 2.2 никогда не возвращается

Я использую EWS Managed API v2.2 для вызова EWS. Недавно у одного из моих клиентов у нас странная ситуация, когда вызовы службы, любой вызов службы, никогда не получают ответа.

Мы устанавливаем явный тайм-аут, связанные с вызовами службы с протоколированием и используем прослушивание трассировки EWS. Слушатель показывает сообщение SOAP EWSRequest и это. В протоколе отображается запись журнала "перед вызовом службы", но не запись "после вызова службы".

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

Так инициализируется сервис:

public ExchangeWebService(string username, string password, string emailAddress, string exchangeUrl, string exchangeVersion)
{
    ExchangeVersion exVersion = (ExchangeVersion)Enum.Parse(typeof(ExchangeVersion), exchangeVersion);
    _exchangeService = CreateExchangeService(username, password, emailAddress, exchangeUrl, exVersion);
    _exchangeService.Timeout = 30000;           
}

private static ExchangeService CreateExchangeService(string username, string password, string emailAddress, 
                                                             string exchangeUrl, ExchangeVersion exchangeVersion)
{

    IntegrationLogging _il = new IntegrationLogging(Constants.LoggingSourceName);

    ExchangeService service = new ExchangeService(exchangeVersion);
            QualifiedUserName qualifiedName = new QualifiedUserName(username);
    NetworkCredential credentials = new NetworkCredential(qualifiedName.UserName, password);

    if (qualifiedName.HasDomain)
    {
        credentials.Domain = qualifiedName.Domain;
    }

    service.Credentials = credentials;

    if (string.IsNullOrEmpty(exchangeUrl))
    {
        if (string.IsNullOrEmpty(emailAddress))
        {
            throw new ArgumentException("emailAddress and exchangeUrl parameters cannot both be empty");
        }
        else
        {
            _il.WriteTrace(string.Format("CreateExchangeService using auto discovery with email address {0} and user name {1}. {2}", emailAddress, username, Environment.StackTrace));
            service.AutodiscoverUrl(emailAddress);
        }
    }
    else
    {
        _il.WriteTrace(string.Format("CreateExchangeService using EWS URI {0} and user name {1}", exchangeUrl, username));
        service.Url = new Uri(exchangeUrl);
    }

    return service;
}

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

_il.WriteTrace("ConvertInternalIdToEwsId:mailboxAddress=" + mailboxAddress);

AlternateIdBase _altBase = _exchangeService.ConvertId(_alternateId, IdFormat.EwsId);

_il.WriteTrace("ConvertInternalIdToEwsId:Returned from call");

return ((AlternateId)_altBase).UniqueId;

Экземпляр службы имеет тип Microsoft.Exchange.WebServices.Data.ExchangeService.

Эта проблема кажется прерывистой. Как вызов не может вызвать ответ, исключение или тайм-аут?

4b9b3361

Ответ 1

Эй, я дважды проверю, когда я нахожусь в офисе... но имел подобную проблему...

В моем случае это в конечном итоге возвращается, пришлось оставить его на некоторое время.

У меня была моя, завернутая в try/catch, и поставила точку прерывания на уловку.

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

try
{
    service.AutodiscoverUrl(emailAddress);
}
catch (Exception) 
{  //break point here and leave for at least 10 min
    throw;
}