C# 将Webapi发布到IIS后TFS WebHook失败

C# 将Webapi发布到IIS后TFS WebHook失败,c#,asp.net-web-api,iis-7.5,tfs-2015,asp.net-webhooks,C#,Asp.net Web Api,Iis 7.5,Tfs 2015,Asp.net Webhooks,我使用TFS 2015 Webhook在签入时收到通知。我已经使用.NET4.6创建了一个API,以便接收通知。当我使用Visual Studio 2015加载API时,它工作得非常好,但一旦我将其发布到IIS 7,TFS就会开始显示状态代码:500,即使代码执行时没有任何异常 下面是来自Web Api的方法。我正在将输出写入日志,以确保它被执行。它每次都写“回归成功” public HttpResponseMessage Post([FromBody]Models.Content va

我使用TFS 2015 Webhook在签入时收到通知。我已经使用.NET4.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);
            }
        }
    }

编辑:刚刚发现只有在执行下面的方法时才会发生错误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;
    }

根据错误消息
状态代码:500
应该是内部服务器错误,发生了一些奇怪和不寻常的事情,可能根本不是您的错

当您在Internet信息服务(IIS)7.0上遇到500个错误时,请尝试检查事件查看器是否有任何其他包含HResult代码的日志。然后,请参阅以下文章以了解进一步的故障排除:


还要检查此线程是否对您有帮助:

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

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。因此,我发现使它工作的方法是确保只有在TUEAPI返回OK后才执行这一行。这可以通过使用Async/Await和Thread.Sleep()来完成。

在您提示后,我试图检查事件查看器,但那里没有IIS日志条目:(GetFileContent方法和Webhook句柄部分之间的关系是什么?代码不足以让我们检查问题。很抱歉没有发布整个代码,我认为代码太多了。但基本上UpdateIndex方法读取它接收的chageset中的项,并将TFS路径传递给GetFileContent。