我正在使用EWS Managed API v2.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
。
这个问题似乎是间歇性的。如何调用不会导致响应,异常或超时?
答案 0 :(得分:0)
在我的情况下,它最终会返回,不得不离开它很长一段时间。
我把我的包裹在一个尝试/捕获中,并在捕获物上设置了一个断点。
不记得了,但我认为这发生在我使用错误的自动发现电子邮件地址时。
try
{
service.AutodiscoverUrl(emailAddress);
}
catch (Exception)
{ //break point here and leave for at least 10 min
throw;
}