0

我正在使用 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);
            }
        }
    }

这是返回的消息

这是我使用 Visual Studio 执行 API 时的返回,相同的代码。

编辑:刚刚发现错误 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;
    }
4

2 回答 2

1

因此,当我在发布帖子后对其进行编辑时,问题出在这一行:

TfsTeamProjectCollection server = new TfsTeamProjectCollection(new Uri("http://tfs2015.com.br:8080/tfs/cd-jv"), new System.Net.NetworkCredential("user", "password"));

出于某种原因,如果在 API 向 Webhook 返回 OK 之前发出此请求,Webhook 会显示错误 500。所以我发现使其工作的方法是确保仅在 tue API 返回 OK 后执行此行。它可以通过使用 Async/Await 和 Thread.Sleep() 来完成。

于 2017-09-05T11:36:51.063 回答
0

根据错误消息Status Code: 500,它应该是内部服务器错误,发生了一些奇怪和不寻常的事情,这可能根本不是你的错。

当您在 Internet 信息服务 (IIS) 7.0 上遇到 500 错误时,请尝试检查事件查看器,是否有任何其他带有 HResult 代码的日志。然后参考以下文章进行进一步的故障排除: 打开 IIS 7.0 网页时出现“HTTP 错误 500.0 – 内部服务器错误”错误

还要检查此线程是否对您有帮助:如何在 IIS 托管网站中接收自定义 webhook?

于 2017-09-01T07:07:40.337 回答