2011-01-01 22 views
8

Tôi đang cố gắng đọc trạng thái twitter công khai của người dùng để tôi có thể hiển thị nó trong ứng dụng Windows Phone của mình.Làm cách nào để đọc một nguồn cấp dữ liệu twitter công khai bằng .Net (trên Windows Phone)

Tôi đang sử dụng ví dụ Scott Gu: http://weblogs.asp.net/scottgu/archive/2010/03/18/building-a-windows-phone-7-twitter-application-using-silverlight.aspx

Khi mã của tôi trở lại từ cuộc gọi async, tôi nhận được một "System.Security.SecurityException" ngay sau khi tôi cố gắng sử dụng e.Result.

Tôi biết uri của tôi là chính xác vì tôi có thể mở nó trong trình duyệt và nhận được kết quả tốt.

Đây là mã relavent của tôi:

public void LoadNewsLine() 
    { 
     WebClient twitter = new WebClient(); 

     twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted); 
     twitter.DownloadStringAsync(new Uri("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=krashlander"));   
    } 

    void twitter_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     XElement xmlTweets = XElement.Parse(e.Result); //exception thrown here! 

     var message = from tweet in xmlTweets.Descendants("status") 
         select tweet.Element("text").Value; 

     //Set message and tell UI to update. 
     //NewsLine = message.ToString(); 
     //RaisePropertyChanged("NewsLine"); 
    } 

Bất kỳ ý tưởng bất cứ ai?

GIẢI PHÁP: Cuối cùng tôi đã tìm ra điều này. Tôi chỉ đơn giản là quên không chú ý đến khả năng: trong tệp WMAppManifest.xml. Một khi tôi đã làm điều đó, ngoại lệ bảo mật đã biến mất.

+0

twitter không có một ga cho số lần bạn có thể sử dụng thiết bị đầu cuối của họ mỗi giờ/ngày? Có lẽ bạn đã max? Ngoài ra, bạn có thể thử fiddler, xem nếu bạn có thể nắm bắt được yêu cầu thô. PS, mã của bạn đã làm việc cho tôi. –

+0

Tôi chưa đạt đến giới hạn nào. Đã không gọi nó nhiều hơn một vài lần. –

+0

Tôi cũng có lỗi tương tự .. Nhưng không thể tìm thấy trong ứng dụng WIn 7 (sl 4) của tôi ... anyhelp ?? Cách khắc phục lỗi này ??? Tôi cũng đã thử mã tương tự trên ứng dụng Silverlight 4 bình thường ... Nó tăng ngoại lệ bảo mật ... –

Trả lời

4

Cuối cùng tôi đã tìm ra điều này. Tôi vừa quên bỏ ghi chú:

 <Capability Name="ID_CAP_NETWORKING"/> 

khả năng trong tệp WMAppManifest.xml. Một khi tôi đã làm điều đó, ngoại lệ bảo mật đã biến mất.

3

Bạn nên xem TweetSharp. Nó hoạt động khá tốt với tôi. http://tweetsharp.codeplex.com

+0

Có vẻ thú vị, nhưng tôi muốn làm điều này mà không cần bất kỳ mã bên thứ 3 nào. Tôi chỉ muốn ĐỌC trạng thái công khai của người dùng mà tôi sở hữu (krashlander) Muốn tránh bất kỳ sự cho phép nào nếu có thể. –

+0

Tweetsharp đã chuyển sang github và nuget, nhưng phiên bản mới nhất chưa hỗ trợ WP. http://nuget.org/List/Packages/TweetSharp cũng tweetsharp.com không còn khả dụng nữa. dự án trông không còn tồn tại. – invalidusername

+0

Có, nó đã chết rất nhiều. Tôi đã nói chuyện với nhà phát triển chính Crena (?) Một lúc trước. Một điều đáng tiếc thực sự. Anh ấy vẫn mở để đóng góp. –

0

Tôi đã đạt mục tương tự trên ứng dụng của riêng mình. Đây là giải pháp của tôi:

WebClient twitter=new WebClient(); 
twitter.OpenReadCompleted += new OpenReadCompletedEventHandler(twitter_OpenReadCompleted); 
twitter.OpenReadAsync(new Uri("http://api.twitter.com...")); 

void twitter_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { 
    ... 
} 
+0

Vẫn gặp lỗi. Đánh giá theo nhận xét ở trên, có thể là sự cố với điện thoại cửa sổ. –

0

Tôi đã thử mã bạn được đăng và không có ngoại lệ được ném ra, nhận được kết quả như mong đợi, tất cả dường như là tốt. Vì vậy, phải có một cái gì đó trên máy của bạn, kết nối mạng (proxy vv) mà gây ra điều này. Ngoại lệ chi tiết, StackTrace là gì? Có lẽ Simple use of WebClient on Windows Phone 7 throws a NetworkError sẽ giúp bạn?

0

Ngoại lệ này thường xảy ra khi các chuỗi tham chiếu chéo theo bất kỳ cách nào. Trong trường hợp này, nó có thể liên quan đến Webclient luôn quay trở lại trên chuỗi giao diện người dùng. Bạn có lẽ có thể giải quyết vấn đề bằng cách sử dụng HttpWebRequest thay thế (đó là hiệu suất tốt hơn khôn ngoan anyway). Kiểm tra this chuỗi trên diễn đàn msdn để biết thêm thông tin

+0

Tôi sẽ thử điều này ngay sau khi tôi có cơ hội. –

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