Сервер не может выполнить автообнаружение EWS

На нашем тестовом сервере автообнаружение EWS не работает. Чтобы исключить неправильный набор параметров IIS из списка причин, я C & P'ed вместе приложение WindowsForms (код ниже) и поместил его вместе с Microsoft.Exchange.Webservice.dll в папку, на которой у меня есть разрешение на запись,

К сожалению, ни xml, ни текстовый файл не создаются. Вместо этого я получаю ошибку Unhandled Exception.

System.NullReferenceException 
 at System.Windows.Forms.TextBoxBase.AppendText(String text)

Это не происходит на моей машине разработки, которая находится в том же домене AD и на котором тестовое приложение всегда возвращает, что автообнаружение было успешным.

Вопрос. Как получилось, что нет вывода трассировки?

Итак, теперь мой код приложения:

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Exchange.WebServices;
using Microsoft.Exchange.WebServices.Data;

namespace ADDebugWin
{
 public partial class Form1 : Form
 {
 public static string traceData;
 public Form1()
 {
 InitializeComponent();
 }

 private void button1_Click(object sender, EventArgs e)
 {
 ExchangeService ews = new ExchangeService(ExchangeVersion.Exchange2010);
 ews.TraceListener = new TraceListener();
 // Optional flags to indicate the requests and responses to trace.
 ews.TraceFlags = TraceFlags.EwsRequest | TraceFlags.EwsResponse;
 ews.TraceEnabled = true;
 ews.UseDefaultCredentials = true;
 try {
 ews.AutodiscoverUrl("[removed_email]");
 textBox1.AppendText("AutoDiscover erfolgreich.");
 } catch (Exception ex) {
 textBox1.AppendText(traceData);
 textBox1.AppendText(ex.Message + "\r\n" + ex.StackTrace);
 }
 }
 }
}

TraceListener.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ADDebugMvc.Controllers;
using Microsoft.Exchange.WebServices.Data;
using System.Xml;

namespace ADDebugMvc.Models
{

 class TraceListener : ITraceListener
 {
 public void Trace(string traceType, string traceMessage)
 {
 CreateXMLTextFile(traceType, traceMessage.ToString());
 HomeController.traceData += traceType + " " + traceMessage.ToString() + "\r\n";
 }

 private void CreateXMLTextFile(string fileName, string traceContent)
 {
 // Create a new XML file for the trace information.
 try
 {
 // If the trace data is valid XML, create an XmlDocument object and save.
 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.Load(traceContent);
 xmlDoc.Save(fileName + ".xml");
 }
 catch
 {
 // If the trace data is not valid XML, save it as a text document.
 System.IO.File.WriteAllText(fileName + ".txt", traceContent);
 }
 }
 }
}
1 ответ

Следует отметить, что

ews.TraceFlags = TraceFlags.EwsRequest | TraceFlags.EwsResponse;

не возвращает никаких следов во время AutoDiscover.

(ews.TraceFlags = TraceFlags.All; делает.)

Таким образом, никакая строка не добавляется к traceData, поэтому traceData==null → Exception при добавлении ее в TextBox.

licensed under cc by-sa 3.0 with attribution.