2014-04-01 128 views
1

我有一個代碼片段,直到上週末的某個時候才工作。 對於給定的項目名稱,很簡單,給我與其相關的團隊成員。 查詢本身起作用並給了我一個結果集,但是當我嘗試遍歷任何字典時,我得到一個異常。Rally REST API中斷了嗎?

以下是摘錄

  try 
      { 
       Request projectRequest = new Request("project"); 
       projectRequest.Fetch = new List<string>() 
              { 
               "Name", 
               "Owner", 
               "State", 
               "Description", 
               "Workspace", 
               "TeamMembers", 
               "Releases"}; 
       String projectName = rallyProject.Text; 
       // get me results for the given project 
       projectRequest.Query = new Query("Name", Query.Operator.Equals, projectName); 
       QueryResult queryProjectResults = restApi.Query(projectRequest); 
       DynamicJsonObject myProject = queryProjectResults.Results.First(); 

       myProjectReference = myProject["_ref"]; 

       var projectState = myProject["State"]; 
       var workspace = myProject["Workspace"]; 
       myWorkspaceRef = workspace["_ref"]; 
       string currentUser = userComboBox.Text; 

       userComboBox.DataSource = null; 
       userComboBox.Items.Clear(); 
       userComboBox.Sorted = false; 

       // iterationComboBox.Items.Add("Unscheduled"); 
       userMap.Clear(); 
       List<string> userList = new List<string>(); 
       userList.Add(""); 

-------一切工作截止到這一點,項目查詢成功的我可以提取簡單的字符串。 但是下一條語句失敗,第一個枚舉拋出異常。

   foreach (var result in myProject["TeamMembers"]) 
       { 
        userMap.Add(result["_refObjectName"], result["_ref"]); 
        userList.Add(result["_refObjectName"]); 
       } 
       userList.Sort(); 
      } 
      catch (Exception ex) 
      { 
       myWorkspaceRef = null; 
      } 

引發的異常是 無法隱式轉換類型 'Rally.RestApi.DynamicJsonObject' 到 'System.Collections.IEnumerable'。一個明確的轉換存在(你是否缺少一個演員?)

如上所述,這已工作數月直到上週左右。只有在機器上更改的東西將是正常的Windows更新。

任何意見將是最歡迎的, 在此先感謝

約翰

回答

0

使用WS API的最新DLL from Rally REST .NET Toolkit's repo和v2.0(我們鼓勵用戶這樣做的時候,我可以複製同樣的錯誤,因爲根據this schedule,今年6月以後WS API的1.43將不被支持)。

爲了與WS API的2.0版代碼的工作,我修改了代碼稍微進行單獨的調用來獲得TeamMembers收集的對象:

Request teamRequest = new Request(myProject["TeamMembers"]); 
       QueryResult teamResult = restApi.Query(teamRequest); 
       foreach (var teammate in teamResult.Results) 
       { 
        userMap.Add(teammate["_refObjectName"], teammate["_ref"]); 
        userList.Add(teammate["_refObjectName"]); 
       } 

在拉力賽的Web服務API的2.0版出於性能原因,我們刪除了在相同響應中返回子集合的能力。在v2.0中,獲取集合將返回一個包含從中獲取集合的計數和url的對象。在較早版本的WS API中,某些提取列表會創建很多遞歸調用,並且所有包含在提取中的集合都會使調用非常昂貴。在WS API v2.0中,這不會發生,因爲爲了獲得集合的對象必須進行單獨的調用。

如果您在針對WS API 1.43或更高版本運行代碼時遇到此問題,請從昨天開始重試,因爲在獲取包含的發行版時,我們有一個臨時問題影響了1.43。這個問題在同一天解決。

下面是一個完整的代碼與WS API的2.0版作品:

static void Main(string[] args) 
      { 
       RallyRestApi restApi; 

       restApi = new RallyRestApi("[email protected]", "secret", "https://rally1.rallydev.com", "v2.0"); 
       String workspaceRef = "/workspace/12352608129"; 
       try 
       { 
        Request projectRequest = new Request("project"); 
        projectRequest.Fetch = new List<string>() 
               { 
                "Name", 
                "Owner", 
                "State", 
                "Description", 
                "Workspace", 
                "TeamMembers", 
                "Releases"}; 
        projectRequest.Workspace = workspaceRef; 
        String projectName = "Company X"; 

        projectRequest.Query = new Query("Name", Query.Operator.Equals, projectName); 
        QueryResult queryProjectResults = restApi.Query(projectRequest); 
        DynamicJsonObject myProject = queryProjectResults.Results.First(); 

        String myProjectReference = myProject["_ref"]; 

        var projectState = myProject["State"]; 
        List<string> userList = new List<string>(); 
        userList.Add(""); 
        Dictionary<string, string> userMap = new Dictionary<string, string>(); 

        Request teamRequest = new Request(myProject["TeamMembers"]); 
        QueryResult teamResult = restApi.Query(teamRequest); 
        foreach (var teammate in teamResult.Results) 
        { 
         userMap.Add(teammate["_refObjectName"], teammate["_ref"]); 
         userList.Add(teammate["_refObjectName"]); 
        } 
        userList.Sort(); 
        Console.WriteLine("Test user: " + userMap["nick01"]); 

       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex); 

       } 
      } 
+0

豔光四射,萬分感謝。 – user3482025

+0

不客氣 – nickm

相關問題