2012-07-13 36 views
7

Đây là kịch bản của tôi: Tôi phải đọc email từ tài khoản trao đổi 2010 sp2. Tôi phải sử dụng Exchange Web Services, POP3 và IMAP bị chặn. Tôi phải kiểm tra ứng dụng của mình trong môi trường mà mọi người có thể truy cập tài khoản của họ thông qua trình duyệt web chỉ trong mạng nội bộ. Tôi không thể gỡ lỗi ứng dụng của mình trực tiếp vào mạng nội bộ này. Tôi có đoạn này để truy cập vào tài khoản:đọc email bằng cách sử dụng dịch vụ trao đổi web

private void Dowork() 
{ 
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 

    string dominio = "domain"; 
    string usuario = "user"; 
    string password = "password"; 

    service.Credentials = new NetworkCredential(usuario, password, dominio); 

    string url = usuario + "@" + dominio + ".com"; 

    service.AutodiscoverUrl(url, RedirectionUrlValidationCallback); 
    //service.AutodiscoverUrl(url); 

    FindItemsResults<Item> findResults = service.FindItems(
     WellKnownFolderName.Inbox, 
     new ItemView(10)); 

    string content = string.Empty; 

    foreach (Item item in findResults.Items) 
    { 
     EmailMessage email = EmailMessage.Bind(service, item.Id); 
     email.Load(); 

     content += item.Subject + "\n"; 
     content += email.From.Address + "\n"; 
     content += email.Body + "\n\n"; 

     //Console.WriteLine(item.Subject); 
     //Console.WriteLine(email.From.Address); 
     //Console.WriteLine(email.Body); 
    } 

    string result = content; 
} 

// Create the callback to validate the redirection URL. 
static bool RedirectionUrlValidationCallback(String redirectionUrl) 
{ 
    // Perform validation. 
    return (redirectionUrl == "https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml"); 
} 

Nếu tôi sử dụng dòng này:

service.AutodiscoverUrl(url); 

tôi nhận được lỗi này:

"Autodiscover blocked a potentially insecure redirection to https://autodiscover.colpatria.com/autodiscover/autodiscover.xml . To allow Autodiscover to follow the redirection, use the AutodiscoverUrl(string, AutodiscoverRedirectionUrlValidationCallback) overload."

Vì vậy, các phương pháp RedirectionUrlValidationCallback được thực hiện, tôi m không chắc liệu url có đúng không. Thực tế là tôi nhận được lỗi này:

"The Autodiscover service couldn't be located".

Có thể Tự động phát hiện không được định cấu hình đúng không ?? Tôi không phải là quản trị viên trao đổi, làm thế nào tôi có thể biết được nếu các công trình tự động phát hiện? Tôi cần các đối số để nói cho quản trị viên trao đổi biết tính năng này phải được định cấu hình. Cảm ơn vì bất kì sự giúp đỡ.

+2

Tôi chắc chắn bạn đã tìm thấy một cách ngay bây giờ khi câu hỏi này được một tuổi, chỉ muốn thêm rằng bằng cách sử dụng gọi 'AutoDiscoverUrl' không phải là cách duy nhất để kết nối với EWS. Thay vào đó, hãy đặt trực tiếp url của bạn có thể là một giải pháp thay thế khả thi. Ví dụ: 'service.Url = new URI (" https: //your_exchange_server/EWS/Exchange.asmx ");' – Halvard

Trả lời

2

Bằng cách nào đó bạn cần phải ghi lại kết quả của những gì redirectionUrl là. Bạn sẽ nhận được lỗi này khi số redirectionUrl của bạn không khớp với URI bạn đã chỉ định (tức là trả lại xác thực tự động phát hiện của bạn trả về FALSE). Chắc chắn URI redirectionUrl không phải là những gì bạn nghĩ. Nếu bạn đang sử dụng SSL - bạn cần xử lý cuộc gọi xác thực chuyển hướng.

Vì bạn không thể gỡ lỗi ứng dụng, có lẽ bạn có thể gửi email cho chính mình, đăng nhập vào DB hoặc tệp được chia sẻ hoặc có thể sử dụng nhật ký sự kiện ứng dụng (ném ngoại lệ ứng dụng).

Lưu ý: Lỗi đầu tiên cho bạn biết URI tự động phát hiện là https://autodiscover.colpatria.com/autodiscover/autodiscover.xml. Điều này có nên thay thế chuỗi hiện tại https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml không?

Đồng thời xem related SO post regarding Exchange AutodiscoveryValidating a Potentially Unsafe Redirection URL on MSDN.

3

Đã gặp phải các sự cố tương tự gần đây và hoạt động để giải quyết chúng Tôi đã phát hiện ra một tiện ích rất hữu ích trong xử lý sự cố: EWS Editor Nó có thể không giải quyết được sự cố của bạn nhưng có thể được sử dụng để lặp qua các kết hợp cấu hình khác nhau. làm sáng tỏ một số vấn đề của bạn.

Tôi đã sử dụng ứng dụng này khi Làm việc với một khách hàng để thiết lập kết nối Autodiscover và dịch vụ URL để kiểm tra và prod máy chủ Exchange. Nó rất tiện dụng không chỉ đối với tôi mà cả nhân viên CNTT của khách hàng nữa. Họ đã tải xuống và sử dụng tiện ích này để kiểm tra và xác minh cài đặt của họ.

Từ http://ewseditor.codeplex.com:

Mô tả dự án

EWSEditor có ba mục tiêu:

  1. Thể hiện các chức năng API Trao đổi Web Services Managed và đơn giản để các nhà phát triển thông qua các mã nguồn của nó.

  2. Thể hiện lưu lượng truy cập SOAP của Exchange Web Services được sử dụng để thực hiện các tác vụ được khởi tạo thông qua giao diện người dùng của trình thám hiểm.

  3. Assist phi phát triển trong gỡ lỗi và sự hiểu biết các cửa hàng giao dịch bằng cách khám phá mục, thư mục và tài sản của họ ở độ sâu

+1

EWSEditor hiện đã có trên GitHub: https://github.com/dseph/EwsEditor – RenniePet

1

Đây là một bài cũ tôi nghĩ rằng tôi muốn được đặt trong một dung dịch ví dụ đầy đủ cho lỗi được báo cáo. Chỉ cần thay thế dịch vụ .AutodiscoverUrl ("[email protected]"); với System.Uri ("https://mail.somedomain.org/ews/Exchange.asmx");

Dưới đây là khối đầy đủ các mã

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 
       service.Credentials = new WebCredentials("someuser", "somepassword"); 
       //service.AutodiscoverUrl("[email protected]"); 
       service.Url = new System.Uri("https://mail.somedomain.org/ews/Exchange.asmx"); 
0

Hãy thử service.TraceEnabled = true;

WFM. Trong trường hợp của tôi, tôi cần thiết lập SSL/TLS bằng cách cài đặt chứng chỉ từ Exchange Server lên máy khách. Tôi đã được dẫn đến giải pháp này từ đầu ra của dấu vết.

0

này hoạt động như một say mê với tôi:

var exchange = new ExchangeService(ExchangeVersion.Exchange2013_SP1); 
    var username = Settings.EmailUserName; 
    var password = Settings.EmailPassword; 
    var domain = Settings.EmailDomain; 
    var email = Settings.Email; 
    exchange.Credentials = new WebCredentials(email, password); 
    exchange.AutodiscoverUrl(email, RedirectionCallback); 

và RedirectionCallback là:

static bool RedirectionCallback(string url) 
     { 
      // Return true if the URL is an HTTPS URL. 
      return url.ToLower().StartsWith("https://"); 
     } 

heres là liên kết: https://msdn.microsoft.com/en-us/library/office/dd635285(v=exchg.80).aspx

Trân trọng!

Các vấn đề liên quan