0

EWSマネージドAPIに深刻な問題があります。このプロジェクトでgithubに関する問題を公開しましたが、フィードバックはありませんでした。私が正しい方向に向けることができる人がいることを願っています(先週EWSに別の問題があり、この素晴らしいコミュニティのおかげで、その問題は解決されました)。EWS managed API SearchMailboxesがServiceXmlDeserializationExceptionでプロダクションサーバで例外を生成する

私の問題について:私はあなたに言ったように、簡単なクエリを使っていくつかのメッセージを見つけるためにEWS managed APIを使用しています。唯一のいくつかの項目/メールボックスとテスト環境では、検索が完璧に機能していますが、私は生産にそれを置くとき、私は非常に奇妙な問題を取得しています(例外):

[ServiceXmlDeserializationException: An element node 't:Mailbox' of the type Element was expected, but node 't:SearchScope' of type Element was found.] 
    Microsoft.Exchange.WebServices.Data.EwsXmlReader.InternalReadElement(XmlNamespace xmlNamespace, String localName, XmlNodeType nodeType) +451 
    Microsoft.Exchange.WebServices.Data.SearchMailboxesResult.LoadFromXml(EwsServiceXmlReader reader) +464 
    Microsoft.Exchange.WebServices.Data.SearchMailboxesResponse.ReadElementsFromXml(EwsServiceXmlReader reader) +47 
    Microsoft.Exchange.WebServices.Data.ServiceResponse.LoadFromXml(EwsServiceXmlReader reader, String xmlElementName) +360 
    Microsoft.Exchange.WebServices.Data.SearchMailboxesRequest.ParseResponse(EwsServiceXmlReader reader) +230 
    Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(EwsServiceXmlReader ewsXmlReader) +157 
    Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponseXml(Stream responseStream) +87 
    Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponse(IEwsHttpWebResponse response) +403 
    Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute() +53 
    XXX.XXX.MailManager.Admin.Controllers.MailingManagerController.Search(MailingManagerMasterModel masterModel) +722 
    lambda_method(Closure , ControllerBase , Object[]) +139 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +209 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +67 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +386 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +386 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +30 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +186 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +44 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +399 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +137 

検索を行うためのコードがあります以下:

List<MailboxSearchScope> mailboxSearchScopes = new List<MailboxSearchScope>(); 
       foreach (SearchableMailbox mailbox in response.SearchableMailboxes) 
       { 
        mailboxSearchScopes.Add(new MailboxSearchScope(mailbox.ReferenceId, MailboxSearchLocation.All)); 
       } 

       SearchMailboxesParameters searchMailboxesParameters = new SearchMailboxesParameters(); 

       List<MailboxQuery> queries = new List<MailboxQuery>() 
        { 
         new MailboxQuery(String.Format("Body:{0} OR Subject:{0}", masterModel.FilteringOptions.Subject), mailboxSearchScopes.ToArray()) 
        }; 

       searchMailboxesParameters.SearchQueries = queries.ToArray(); 
       searchMailboxesParameters.PerformDeduplication = false; 
       searchMailboxesParameters.ResultType = SearchResultType.PreviewOnly; 

       ServiceResponseCollection<SearchMailboxesResponse> responseCollection = service.SearchMailboxes(searchMailboxesParameters); 

あなたはどこに問題があると思いますか?

ありがとうございました。

答えて

0

ので、グレンによって与えられた提案のおかげで、私は問題を解決することができました - 私は、トレースが有効と私はxmlファイルとこの方法私にすべての要求と応答をログに記録バグを見つけました。

MailboxSearchScopeとして配置される検索可能なメールボックスの列挙中に何らかの理由で(何故私にはわからないので)なぜか質問しないで、それらのうちのいくつかがReferenceIdに空の文字列を持っていて、生成された要求は無効でした。

だから、私がやったことは非常に簡単だった:

foreach (SearchableMailbox mailbox in response.SearchableMailboxes) 
       { 
        if (String.IsNullOrEmpty(mailbox.ReferenceId)) 
         continue; 

        mailboxSearchScopes.Add(new MailboxSearchScope(mailbox.ReferenceId, MailboxSearchLocation.All)); 
       } 
1

トレースを有効にしてhttps://msdn.microsoft.com/en-us/library/office/dd633676(v=exchg.80).aspxを有効にして、作成したリクエストをサーバーにダンプすることをお勧めします。例えば、あなたの要求の中で何らかの失敗を引き起こしているものがあったら、正しくフォーマットされたリクエストは次の例のようになります。このエラーでは、MailboxSearchScopeのメールボックス要素が見つからないことを示しています(たとえば、検索するメールボックスは含めません)。トレースダンプ(またはフィドラーキャプチャ)がこれを確認します。

<?xml version="1.0" encoding="utf-8"?> 
 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
 
    <soap:Header> 
 
     <t:RequestServerVersion Version="Exchange2013_SP1" /> 
 
    </soap:Header> 
 
    <soap:Body> 
 
     <m:SearchMailboxes> 
 
     <m:SearchQueries> 
 
      <t:MailboxQuery> 
 
      <t:Query>Subject:test</t:Query> 
 
      <t:MailboxSearchScopes> 
 
       <t:MailboxSearchScope> 
 
       <t:Mailbox>/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=a29159c5bd8e4f7ab9127r</t:Mailbox> 
 
       <t:SearchScope>PrimaryOnly</t:SearchScope> 
 
       <t:ExtendedAttributes /> 
 
       </t:MailboxSearchScope> 
 
      </t:MailboxSearchScopes> 
 
      </t:MailboxQuery> 
 
     </m:SearchQueries> 
 
     <m:ResultType>PreviewOnly</m:ResultType> 
 
     <m:Deduplication>false</m:Deduplication> 
 
     <m:PageSize>1000</m:PageSize> 
 
     <m:PageDirection>Next</m:PageDirection> 
 
     </m:SearchMailboxes> 
 
    </soap:Body> 
 
    </soap:Envelope>

+0

はご提案をいただき、ありがとうございます。私はトレースを有効にしましたが、今ここで何が起こっているのかを知るためにプロダクションデプロイメントを行います。ありがとう、私はあなたに戻ってきます。 – Edi

関連する問題