将Webapi发布到IIS后,TFS WebHook失败

时间:2017-08-31 14:25:00

标签: c# asp.net-web-api iis-7.5 tfs2015 asp.net-webhooks

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

2 个答案:

答案 0 :(得分: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返回后执行此行好。可以使用Async / Await和Thread.Sleep()来完成。

答案 1 :(得分:0)

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

当您在Internet Information Services(IIS)7.0上遇到500错误时,如果有任何其他带有HResult代码的日志,请尝试检查事件查看器。然后参考下面的文章进一步解决问题: HTTP Error 500.0 – Internal Server Error" error when you you open an IIS 7.0 Webpage

同时检查此主题是否对您有帮助:How do I receive a custom webhook in an IIS hosted website?