.net 拉力休息API坏了吗?

.net 拉力休息API坏了吗?,.net,web-services,api,rest,rally,.net,Web Services,Api,Rest,Rally,我有一个代码片段,它一直在工作,直到上周末的某个时候。 这很简单,对于给定的项目名称,请给我与之关联的团队成员。 查询本身可以工作,并给我一个结果集,但是当我尝试迭代任何字典时,我会得到一个异常 下面是片段 try { Request projectRequest = new Request("project"); projectRequest.Fetch = new List<

我有一个代码片段,它一直在工作,直到上周末的某个时候。 这很简单,对于给定的项目名称,请给我与之关联的团队成员。 查询本身可以工作,并给我一个结果集,但是当我尝试迭代任何字典时,我会得到一个异常

下面是片段

            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("");
引发的异常是 无法将类型“Rally.RestApi.DynamicJsonObject”隐式转换为“System.Collections.IEnumerable”。存在显式转换。是否缺少强制转换

如前所述,这已经运行了几个月,直到上周左右。机器上唯一改变的是正常的windows更新

任何建议都是非常受欢迎的, 提前谢谢


John

我可以在使用最新的dll和WS-API v2.0时复制相同的错误,我们鼓励用户这样做,因为在今年6月之后将不支持WS-API的1.43

为了使您的代码能够使用WS-API的v2.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"]);
                }
在Rally Web Services API的v2.0中,出于性能原因,我们取消了在同一响应中返回子集合的功能。在v2.0中,获取集合将返回一个对象,该对象包含计数和从中获取集合的url。在旧版本的WS-API中,某些fetch列表会创建大量递归调用,并且fetch中包含的所有集合都会使调用非常昂贵。在WSAPIv2.0中,这不会发生,因为必须进行单独的调用才能获取集合的对象

如果您在针对WS-API 1.43或更早版本运行代码时遇到此问题,请重试,因为昨天我们遇到了一个临时问题,在获取包含的版本时影响了1.43。这一问题在同一天得到解决

以下是适用于WS-API v2.0的完整代码:

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

                restApi = new RallyRestApi("user@co.com", "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);

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

                restApi = new RallyRestApi("user@co.com", "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);

                }
            }