2015-04-01 124 views
10

我正在使用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

這個問題似乎是間歇性的。如何調用不會導致響應,異常或超時?

+2

您是否檢查過網絡跟蹤,例如fiddler或wireshark以查看呼叫是否正在發送到服務器?或者如果有任何迴應正在收到? – tjleigh 2015-04-18 23:06:56

+0

你的應用程序是多線程的嗎? – 2015-10-19 11:58:52

+0

@YacoubMassad嗨Yacoub。是的。雖然,我相信一次只有一個線程試圖訪問服務。你在想什麼? – Simon 2015-10-21 13:18:07

回答

0

嘿,我會仔細檢查,當我在辦公室......但也有類似的問題...

對我來說,它最終迴歸,不得不離開它相當一段時間。

我把我的包裹在try/catch中,並在catch上放了一個斷點。

不記得了,但我認爲這是在我使用錯誤的自動發現電子郵件地址時發生的。

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