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