2013-11-21 26 views
0

我试图通过EWS连接到Exchange Web Access门户。该门户使用基于表单的身份验证,这很难找到信息。 /EWS/Exchange.asmx页面未公开,对于WebDAV也不是exchweb/bin/auth/owaauth.dll,我无法对服务器设置进行任何更改。我的代码很简单:通过EWS进行Outlook Web Access

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

try 
{ 
    service.Url = new Uri("https://server"); 

    service.TraceEnabled = true; 
    service.Credentials = new WebCredentials("username", "password"); 
    service.UseDefaultCredentials = false; 

    service.FindFolders(
     (FolderId)WellKnownFolderName.Root, 
     new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep }); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

的痕迹,因为它表明我使用基本身份验证信息,但我一直无法找到改变这种通过EWS API的任何信息:

<Trace Tag="EwsRequestHttpHeaders" Tid="1" Time="2013-11-21 16:14:04Z"> 
POST/HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
Accept: text/xml 
User-Agent: ExchangeServicesClient/15.00.0516.014 
Accept-Encoding: gzip,deflate 
</Trace> 

<Trace Tag="EwsRequest" Tid="1" Time="2013-11-21 16:14:04Z" Version="15.00.0516.014"> 
    <?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="Exchange2007_SP1" /> 
     <t:TimeZoneContext> 
     <t:TimeZoneDefinition Id="Eastern Standard Time" /> 
     </t:TimeZoneContext> 
    </soap:Header> 
    <soap:Body> 
     <m:FindFolder Traversal="Deep"> 
     <m:FolderShape> 
      <t:BaseShape>AllProperties</t:BaseShape> 
     </m:FolderShape> 
     <m:IndexedPageFolderView MaxEntriesReturned="2147483647" Offset="0" BasePoint="Beginning" /> 
     <m:ParentFolderIds> 
      <t:DistinguishedFolderId Id="root" /> 
     </m:ParentFolderIds> 
     </m:FindFolder> 
    </soap:Body> 
    </soap:Envelope> 
</Trace> 

<Trace Tag="EwsResponseHttpHeaders" Tid="1" Time="2013-11-21 16:14:05Z"> 
HTTP/1.1 401 Unauthorized 
Connection: Keep-Alive 
X-UA-Compatible: IE=EmulateIE7 
Content-Length: 1293 
Content-Type: text/html 
Date: Thu, 21 Nov 2013 16:14:05 GMT 
Set-Cookie: OutlookSession=996071898c834931b682a258b41187ac; path=/; HttpOnly 
Server: Microsoft-IIS/7.5 
WWW-Authenticate: Basic 
X-Powered-By: ASP.NET 
</Trace> 

最后,我得到的例外是未经授权的,符合市场预期,因为在EWS使用的身份验证方法不受Exchange服务器的支持:

Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. The remote server returned an error: (401) Unauthorized. ---> System. 
Net.WebException: The remote server returned an error: (401) Unauthorized. 
    at System.Net.HttpWebRequest.GetResponse() 
    at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse() 
    at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request) 
    --- End of inner exception stack trace --- 
    at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request) 
    at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request) 
    at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute() 
    at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalFindFolders(IEnumerable`1 parentFolderIds, SearchFilter searchFilter, FolderView view, ServiceErrorHandling errorHandlingMode) 
    at Microsoft.Exchange.WebServices.Data.ExchangeService.FindFolders(FolderId parentFolderId, FolderView view) 

我有理由相信,通过/ OWA URL访问服务器将会起作用,前提是我可以弄清楚如何使用指定凭证的表单身份验证。有没有人有一些关于如何做到这一点的参考或指针?或者我完全在错误的轨道上?

谢谢!

回答

2

Yay回答我自己的问题。事实证明,提供给我的URL是不正确的,而且他们的确有一个EWS/Exchange.asmx URL,它只能与我的代码一起工作。我只需要将URL从它们中删除。 ;)

+0

使用“wheedle”吸引强制性+1 – sasfrog