2017-08-31 122 views
0

我使用TFS 2015 Webhook在發生簽入時收到通知。我使用.NET 4.6創建了一個API,因此我可以收到通知。當我使用Visual Studio 2015加載API時,它完美地工作,但是一旦我將它發佈到IIS 7,TFS就會開始顯示狀態代碼:500,即使代碼在沒有任何異常的情況下執行。Webapi發佈到IIS後TFS WebHook失敗

以下是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; 
    } 
+0

GetFileContent方法和Webhook句柄部分之間的關​​系是什麼?代碼不足以讓我們檢查問題。 –

+0

對不起,沒有發佈整個代碼,我認爲這將是太多的代碼。但基本上,UpdateIndex方法讀取它接收的chageset中的項目並將TFS路徑傳遞給GetFileContent。 –

回答

0

所以,我張貼後編輯的帖子,問題是在這一行:

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

由於某種原因,如果這個請求是在API返回OK到Webhook之前發出的,那麼Webhook會顯示錯誤500.所以我發現使它工作的方式是確保只在tue API返回OK。它可以通過使用Async/Await和Thread.Sleep()來完成。

0

根據錯誤信息Status Code: 500它應該是內部服務器錯誤,一些奇怪和不尋常的事情,這是有可能不是你的錯都沒有。

嘗試檢查事件查看器,如果在Internet信息服務(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?

+0

我嘗試在提示後檢查事件查看器,但沒有IIS日誌條目。 :( –