Я использую 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
.
Эта проблема кажется прерывистой. Как вызов не может вызвать ответ, исключение или тайм-аут?