2011-12-05 47 views
1

我試圖從MonoTouch的在這個片段中調用EWS喜歡的工作:爲什麼我不能讓HttpWebRequest的使用NTLM身份驗證

byte[] bytes = Encoding.UTF8.GetBytes("... some xml here ..."); 
HttpWebRequest req = WebRequest.Create("https://owa.site.com/ews/exchange.asmx") as HttpWebRequest; 
req.Method = "POST"; 
req.KeepAlive = true; 
req.ContentType = "text/xml"; 
req.ContentLength = bytes.Length; 
req.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested; 
CredentialCache ch = new CredentialCache(); 
ch.Add(req.RequestUri, "Negotiate", new NetworkCredential("uname", "pwd", "domain")); 
req.Credentials = ch; 
Stream sreq = req.GetRequestStream(); 
sreq.Write(bytes, 0, bytes.Length); 
sreq.Close(); 
WebResponse resp = req.GetResponse(); 

有一個在最後一行拋出的異常:401:未經授權。

HttpWebRequest是不是應該透明地處理協商,即處理挑戰並生成第二個和第三個請求?

P.S.結果與http和https相同

P.P.S.使用EWS託管API,我已經從模擬器成功的EWS調用(但不幸的是,它不能爲實際設備構建)。在Exchange服務器上使用網絡嗅探器證明在單個託管調用中有三個HTTP請求,並且只有一個來自上面的代碼。

回答