使用Managed API 2.2的EWS调用永远不会返回

Sim*_*mon 10 exchangewebservices

我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

从永不返回的方法之一,我们得到第一个日志条目,但不是第二个,我们的perf监视器显示仍然在服务调用行运行的线程.

_il.WriteTrace("ConvertInternalIdToEwsId:mailboxAddress=" + mailboxAddress);

AlternateIdBase _altBase = _exchangeService.ConvertId(_alternateId, IdFormat.EwsId);

_il.WriteTrace("ConvertInternalIdToEwsId:Returned from call");

return ((AlternateId)_altBase).UniqueId;
Run Code Online (Sandbox Code Playgroud)

服务实例是类型Microsoft.Exchange.WebServices.Data.ExchangeService.

这个问题似乎是间歇性的.如何调用不会导致响应,异常或超时?

Sea*_*kit 0

嘿,当我在办公室时,我会仔细检查......但有类似的问题......

就我而言,它最终确实会回来,不得不离开它很长一段时间。

我将我的包包裹在 try/catch 中,并在 catch 上放置了一个断点。

不记得了,但我认为这是当我使用错误的自动发现电子邮件地址时发生的。

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