我正在使用EWS託管API v2.2來進行EWS呼叫。最近,在我的一位客戶中,我們遇到了一個奇怪的情況,即服務調用,任何服務調用都不會收到響應。使用託管API 2.2的EWS呼叫永不返回
我們正在設置一個顯式超時,周圍有日誌記錄的服務調用,並且正在使用EWS跟蹤監聽。監聽器顯示EWSRequest SOAP消息,就是這樣。日誌記錄顯示「服務前電話」日誌條目,但不顯示「服務後電話」條目。
我懷疑節流可能是其背後並暫時移除了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;
}
從從不返回的方法之一,我們得到的第一個日誌條目,但不是第二,我們的PERF監視器的顯示螺紋仍處於服務電話線運行。
_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
。
這個問題似乎是間歇性的。如何調用不會導致響應,異常或超時?
您是否檢查過網絡跟蹤,例如fiddler或wireshark以查看呼叫是否正在發送到服務器?或者如果有任何迴應正在收到? – tjleigh 2015-04-18 23:06:56
你的應用程序是多線程的嗎? – 2015-10-19 11:58:52
@YacoubMassad嗨Yacoub。是的。雖然,我相信一次只有一個線程試圖訪問服務。你在想什麼? – Simon 2015-10-21 13:18:07