2017-09-23 62 views
0

我明白,自從將asp.net應用程序移植到asp.net核心2.0後,我可能會發生此錯誤(主要是因爲有關加載速度的優化頁面),但我會問這個問題。在等待結果時在asp.net核心2.0中調用wcf aync服務

因此,當我僅提取數據時,我的查詢工作正常,但是,爲了在客戶端上下載數據庫,必須從數據庫獲取文件路徑時遇到問題。由於我不需要文件的整個模型,我在客戶端有3個字段,我填寫了有關文件(etc位置,大小,文件名)的信息,問題是當我向異步請求發送Azure上的WCF服務持有我的實體框架鏈接到數據庫,代碼繼續進行下去,無需等待從數據庫中檢索數據,並在嘗試填充要發送到客戶端的dto對象時拋出空引用異常爲了取回被標記爲下載

文件這是在客戶端

internal async Task<AnimalDocument> GetAnimalDocument(int id) 
    { 

     var data = await _context.GetAnimalDocumentAsync(id); 
     var result = JsonConvert.DeserializeObject<AnimalDocument>(data); 

     return result; 
    } 

我的數據訪問而這正是我得到空例外

public SeriliazedFile GetFile(int id, int type) 
    { 
     var result = new SeriliazedFile(); 
     if (type == 1) 
     { 
      var data = _context.GetHumanFile(id); 
      result.FileName = data.Result.DocumentName; 
      result.FilePath = data.Result.DocumentLocation; 
      result.FileSize = data.Result.FileSize.Value; 
     } 
     else if (type == 2) 
     { 
      var data = _context.GetAnimalDocument(id); 
      result.FileName = data.Result.DocumentName; 
      result.FilePath = data.Result.DocumentLocation; 
      result.FileSize = data.Result.FileSize.Value; 

     } 
     return result; 
    } 

有沒有辦法強制異步請求在返回從WCF檢索的任務之前等待結果?我試着告訴_context.GetAnimalDocument(id).Wait();然而,沒有任何反應,它仍然繼續進行,沒有任何結果。我注意到,檢索數據的觸發器在向頁面發送的ajax請求返回200之後觸發,導致類似死鎖的情況,但我可能是錯誤的。如果任何人都可以給我一個解決方法,那就太好了,我很確定我最終會自己想出來,但是無論如何,時間很少,我希望你有一個美好的一天。

回答

0

我很抱歉發佈這個,它不是WCF或代碼的問題,async與asp.net核心2.0的完美結合,問題出在我身上。我仍然適應在函數類型前有[FromBody]的概念,它似乎是我錯過了一個,並且默認情況下我得到了id 0(不是我可以弄清楚爲什麼我會得到0在沒有數據但無論如何不重要的情況下,在整數字段爲null)。在我的id字段中,數據層返回空值,這就是爲什麼我稍後收到空引用異常的原因。