【发布时间】:2017-08-31 14:25:00
【问题描述】:
我正在使用 TFS 2015 Webhook 在签入时收到通知。我使用 .NET 4.6 创建了一个 API,因此我可以接收通知。当我使用 Visual Studio 2015 加载 API 时它运行良好,但是一旦我将它发布到 IIS 7,TFS 开始显示状态代码:500,即使代码执行时没有任何异常。
这是来自 Web Api 的方法。我正在写一个输出到日志,以确保它被执行。每次都写“返回成功”。
public HttpResponseMessage Post([FromBody]Models.Content value)
{
try
{
IndexUpdater iUpdater = new IndexUpdater();
iUpdater.UpdateIndex(value.resource.changesetId);
using (StreamWriter w = File.AppendText("C:\\publish\\TFSListenerAPI\\log.txt"))
{
w.WriteLine("returning success");
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch(Exception ex)
{
using (StreamWriter w = File.AppendText("C:\\publish\\TFSListenerAPI\\log.txt"))
{
w.WriteLine("erro");
w.WriteLine(ex.Message);
}
}
}
Here is the return when I execute the API using Visual Studio, same code.
编辑:刚刚发现错误500仅在执行以下方法时发生。奇怪的部分是代码有效,内容是 成功返回。
private string GetFileContent(string tfsPath)
{
TfsTeamProjectCollection server = new TfsTeamProjectCollection(new Uri("http://tfs2015.com.br:8080/tfs/cd-jv"), new System.Net.NetworkCredential("user", "password"));
server.Authenticate();
VersionControlServer version = server.GetService(typeof(VersionControlServer)) as VersionControlServer;
Microsoft.TeamFoundation.VersionControl.Client.Item item = version.GetItem(tfsPath);
string tempFileName = System.IO.Path.GetTempFileName();
item.DownloadFile(tempFileName);
var content = File.ReadAllText(tempFileName, Encoding.GetEncoding("ISO-8859-1"));
return content;
}
【问题讨论】:
-
GetFileContent 方法和 Webhook 句柄部分有什么关系?代码不足以让我们检查问题。
-
很抱歉没有发布整个代码,我认为代码太多了。但基本上 UpdateIndex 方法会读取它接收到的 chageset 中的项目并将 TFS 路径传递给 GetFileContent。
标签: c# asp.net-web-api iis-7.5 tfs-2015 asp.net-webhooks