.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);
}
}