TFS的二次开发中,调用VersionControlServer.ArtifactProvider.GetChangeset()方法异常
UI如下:

但在调用TFS的函数的过程中,发现在调用VersionControlServer.ArtifactProvider.GetChangeset()时,
如果WorkItem数量比较多,特别是某个WorkItem的ChangeSet又很多的时候,经常都会出现异常,异常信息如下:
Team Foundation Server vstfs:///VersionControl/Changeset/135900 does not exist or is not accessible at this time.
Technical information (for administrator):
The operation has timed out
不知道哪位有没有遇到类似的问题,怎么解啊?
出现这种异常的原因有可能是哪种原因造成的?
期待有大婶帮忙,这个问题,困扰了我好几个月了。
环境:
TFS Server为TFS2008
现在程式引用的TFS DLL的版本为11.
关键代码如下:
private void btnAddWI_Click(object sender, EventArgs e)
{
try
{
Boolean ReBindCS = false;
ReBindCS = (lstWorkItem.Items.Count > 0 ? false : true);
if (txtWorkItems.Text.Trim() != "")
{
TfsTeamProjectCollection tfsTPC = new TfsTeamProjectCollection(new Uri(appContext.ServerURL), new TfsClientCredentials(new SimpleWebTokenCredential(appContext.UserName, appContext.Password)));
WorkItemStore wis = tfsTPC.GetService<WorkItemStore>();
VersionControlServer vcs = tfsTPC.GetService<VersionControlServer>();
txtWorkItems.Text = txtWorkItems.Text.Trim().Replace(",", ",");
string[] strWIs = txtWorkItems.Text.Trim().Split(',');
string strMsg = string.Empty;
foreach (string strWI in strWIs)
{
//TfsTeamProjectCollection tfsTPC = new TfsTeamProjectCollection(new Uri(appContext.ServerURL), new TfsClientCredentials(new SimpleWebTokenCredential(appContext.UserName, appContext.Password)));
//WorkItemStore wis = tfsTPC.GetService<WorkItemStore>();
//VersionControlServer vcs = tfsTPC.GetService<VersionControlServer>();
int intWI = 0;
string strSA = string.Empty;
string strHasSQL = string.Empty;
if (int.TryParse(strWI, out intWI))
{
try
{
WorkItem wi = wis.GetWorkItem(intWI);
if (wi != null)
{
if (wi.Fields.Contains("Include SQL Script"))
strHasSQL = wi.Fields["Include SQL Script"].Value.ToString();
else
strHasSQL = "No";
if (wi.Fields.Contains("SA"))
strSA = wi.Fields["SA"].Value.ToString();
else
strSA = "N/A";
BSWorkItem bsWI = new BSWorkItem();
bsWI.WorkItemID = strWI;
bsWI.Description = wi.Title;
bsWI.HasSQL = strHasSQL;
bsWI.SA = strSA;
if (appContext.BuildWorkItems == null)
{
appContext.BuildWorkItems = new List<BSWorkItem>();
}
ListViewItem lvi = lstWorkItem.Items.Add(strWI);
lvi.SubItems.Add(strHasSQL);
lvi.SubItems.Add(wi.Title);
lvi.SubItems.Add(strSA);
lvi.EnsureVisible();
if (bsWI.Changesets == null)
{
bsWI.Changesets = new List<BSChangeset>();
}
Common.WriteLog("---------------------------------------------------");
Common.WriteLog("[WI:" + wi.Id + "]");
foreach (Link lnk in wi.Links)
{
Common.WriteLog(" ----------------------------------------------");
Common.WriteLog(" [LK:" + lnk.Comment + "]");
ExternalLink elk = (ExternalLink)lnk;
Common.WriteLog(" [URL:" + elk.LinkedArtifactUri + "]");
Stopwatch sw = new Stopwatch();
sw.Start();
//TfsTeamProjectCollection tfsTPC2 = new TfsTeamProjectCollection(new Uri(appContext.ServerURL), new TfsClientCredentials(new SimpleWebTokenCredential(appContext.UserName, appContext.Password)));
//VersionControlServer vcs2 = tfsTPC2.GetService<VersionControlServer>();
Changeset cs = vcs.ArtifactProvider.GetChangeset(new Uri(elk.LinkedArtifactUri));
sw.Stop();
Common.WriteLog(" [TM:" + sw.Elapsed.ToString() + "]");
Common.WriteLog(" [CS:" + cs.ChangesetId.ToString() + "]");
foreach (Change cg in cs.Changes)
{
Common.WriteLog(" ----------------------------------------------");
Common.WriteLog(" [File:" + cg.Item.ArtifactUri + "]");
BSChangeset bcs = new BSChangeset();
bcs.ChangesetID = cs.ChangesetId.ToString();
bcs.FileName = cg.Item.ServerItem.ToString();
bcs.FileSaveMode = cg.ChangeType;
bsWI.Changesets.Add(bcs);
}
}
//foreach (var changeset in wi.Links.OfType<ExternalLink>().Select(link => vcs.ArtifactProvider.GetChangeset(new Uri(link.LinkedArtifactUri))))
//{
// Common.WriteLog(" [CS:" + changeset.ChangesetId.ToString() + "]");
// foreach (Change cg in changeset.Changes)
// {
// Common.WriteLog(" [File:" + cg.Item.ArtifactUri + "]");
// BSChangeset cs = new BSChangeset();
// cs.ChangesetID = changeset.ChangesetId.ToString();
// cs.FileName = cg.Item.ServerItem.ToString();
// cs.FileSaveMode = cg.ChangeType;
// bsWI.Changesets.Add(cs);
// }
//}
appContext.BuildWorkItems.Add(bsWI);
}
else
{
strMsg += (strMsg == "" ? "" : ",") + strWI;
}
}
catch (Exception exWI)
{
MessageBox.Show(exWI.Message);
strMsg += (strMsg == "" ? "" : ",") + strWI;
//throw;
}
}
}
if (ReBindCS)
lstWorkItem.Items[0].Selected = true;
//if (ReBindCS)
// lstWorkItem_SelectedIndexChanged(sender, e);
txtWorkItems.Text = "";
//TF26198: The work item does not exist, or you do not have permission to access it.
if (strMsg != "")
{
MessageBox.Show("The work item:" + strMsg + " does not exist, or you do not have permission to access it.");
}
}
}
catch (Exception exAll)
{
MessageBox.Show(exAll.Message);
}
}
相关推荐
对Microsoft Team Foundation Server中的签入事件执行自定义操作
对Microsoft Team Foundation Server中的签入事件执行自定义操作。
产教融合实训基地与实践中心建设逻辑图-可编辑版
产教融合实训基地与实践中心建设逻辑图-可编辑版
idea2025-free.zip
idea2025-free.zip
sop基于灵敏度分析的有源配电网智能软开关优化配置升级1(Matlab代码实现)
内容概要:本文提出了一种基于灵敏度分析的有源配电网智能软开关(SOP)优化配置方法,旨在应对高比例分布式电源接入带来的电压波动与网络损耗加剧等问题。研究以IEEE33节点系统为算例,通过改进的灵敏度分析模型量化各节点对电压和功率流动的影响程度,进而构建SOP选址与定容的优化模型,实现降低网损、改善电压分布及提升系统运行灵活性的目标。全文详细阐述了灵敏度指标的数学推导、目标函数与约束条件的建模过程,并基于Matlab实现了完整的仿真求解流程,具备良好的工程实用性与学术参考价值。; 适合人群:电力系统及其自动化、电气工程等相关专业的硕士博士研究生、科研机构研究人员,以及从事智能配电网规划、运行与优化的工程技术人员。; 使用场景及目标:①研究分布式电源大规模接入背景下配电网的主动调控与优化策略;②指导智能软开关在实际配电网中的科学选址与容量配置;③为相关科研课题提供可复现的仿真案例,支撑学术论文撰写与算法验证。; 阅读建议:建议读者结合提供的Matlab代码与IEEE33节点标准模型进行动手实践,重点理解灵敏度指标的物理意义及其在优化模型中的应用逻辑,关注求解过程中的约束设置与算法收敛性,并可进一步拓展至SOP与储能联合配置、多时间尺度优化等复杂场景进行二次开发与研究。
Ubuntu安装Latex
关于Ubuntu安装Latex的详细记录和排错指南


