2016-04-21 67 views
0

我們正在遇到sendAssync發送來自服務器的呼叫不起作用的情況。這裏是我的方案SendAsync無法從外部服務器(Web API2)工作

我們有服務器上託管的我們的內部網絡(DMZ),其中有實現它作爲

Public HttpResponseMessage Get(strind id){ (API 1) 

//do some work 
using(HttpClient client = new HttpClient()){  

//We Invoke another web API which is hosted inside our network and do a post // as 

HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, url); 
message.Content = new StringContent(someStr); 
message.Content.Header.ContentType = new MediaTypeHeaderValue("application/json"); 

try{ 
var response = client.SendAsync(message).Result (API 2) 

} 
catch(Exception e){ 
//Something 
} 
} 

的後SendAsync()一個簡單的GET以外的Web API,結果失敗,出現以下異常

at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification),並且消息表示爲發生一個或多個錯誤。

innerexception也沒有告訴任何好事。它只是InnerException.StackTrace將變爲空白,並且InnerException.Message是發送請求時發生的錯誤。

爲了測試通信,我們從外部服務器爲API 2運行了一個GET請求,並且它工作正常,但POST不起作用。

當我們的內部服務器上都有API(用於獲取和用於發佈帖子的另一個API)託管時,一切正常。

任何建議爲什麼從外部服務器執行時可能不工作?

+1

看看內部的內部異常。 – SLaks

+0

@Slaks我們做了上面提到的「他的innerexception也沒有告訴任何好東西,它只是InnerException.StackTrace空白,InnerException.Message是發送請求時發生錯誤 」 – fireholster

+0

檢查**內部* * InnerException – SLaks

回答

2

簡答:無論我打賭什麼,你必須檢查那些內部的例外,並找出確切的消息。

較長的回答: 當您在內部網絡中託管應用程序時,代碼正常工作(POST調用成功),當移動到DMZ時,失敗強烈表明致電的服務器無法訪問遠程端點。

我敢打賭,你的應用服務器和API 2之間缺乏網絡連接。

+1

感謝@布魯諾,對於遲到的回覆感到抱歉。我只是看着內部的異常,並發現了實際的錯誤信息。它與不允許POST工作的根證書有關。網絡團隊必須進入安裝證書並使用他們設置的特定憑證安裝在DMZ上,然後開始工作。我會將此標記爲答案 – fireholster