2011-03-01 72 views
0

我正在開發Windows Phone 7應用程序,並使用Windows Live身份驗證訪問用戶聯繫人。我有一個Web服務,用下面的方法:在Windows Phone上調用帶有收益回報的Webservice

public IEnumerable<LiveIDContact> GetContactsInformationYield(string LocationID, string DelegationToken) 
    { 
     string uriTemplate = "https://livecontacts.services.live.com/@[email protected]{0}/rest/LiveContacts/Contacts"; 
     var xdoc = WindowsLiveContactAPIRequest(LocationID, DelegationToken, uriTemplate); 
     var contacts = (from contact in xdoc.Descendants("Contact") 
         select contact).ToArray(); 

     foreach (var con in contacts) 
     { 
      RetrieveCID(LocationID, DelegationToken, con); 
      LiveIDContact c = new LiveIDContact() 
      { 
       ID = con.Element("ID").Value, 
       DisplayName = con.Element("Profiles").Element("Personal").Element("DisplayName").Value, 
       CID = (con.Element("CID") != null ? con.Element("CID").Value : "") 

      }; 

      yield return c; 
     } 

    } 

我如何調用梅索德在應用程序:

public void GetContactInformationAsync() 
    { 
     LiveIDClient.GetContactsInformationYieldAsync(LocationID, ConsentToken); 
    } 

這是問題所在,當調用這個梅索德,我等在完成事件。需要4到5分鐘才能更新我的應用中的聯繫人列表(性能問題)。在每個收益率回報中是否有任何事件發生?所以我可以更新我的名單從那個事件?

我在任何地方都找不到答案,所以希望有人知道答案。

+0

您在GetContactInformationAsync方法中調用GetContactsInformationYieldAsync。您尚未發佈該方法,並且當前沒有任何內容調用GetContactsInformationYield。 – 2011-03-01 17:45:38

+0

我打電話給GetContactsInformationYieldAsync(LocationID,ConsentToken); 異步部分由visual studio添加,因爲它是windows phone,每個服務調用都是Asynch。 該方法調用工作,只有問題是需要4至5分鐘加載所有聯繫人。 – 2011-03-01 17:48:46

回答

0

這是否爲每一個聯繫人單獨的HTTP調用?如果是這樣,那麼我認爲你只需要重新設計web服務,以便每撥打一個聯繫人即可撥打電話。

+0

每一個聯繫人都會在RetrieveCID方法之後返回,這種方法做一個網絡請求並獲得一個cid,在高速連接上需要1秒或2秒的時間,所以我認爲最好能夠返回每一個聯繫人。 – 2011-03-01 18:11:02