2016-10-26 14 views
0

Webサービスを呼び出すWindowsサービスがあります。すべてのAPI呼び出しはテストされ、正常に動作します。Windowsサービスはコード0で終了し、エラーが発生していなくても終了します。

サービスは、APIにデータを送信する特定のコードを実行します。それはループに戻り、継続することになっています。それは単に停止です。 JSonは、フィドラーでAPIに送られ、正常に動作します。ここで

は、問題のコードは次のとおりです。 -

public async Task<WorkOrderCreationResponseDto> ImportWorkOrders(WorkOrderCreationRequestDto request) 
    { 
     try 
     { 

      WorkOrderCreationResponseDto resp = await RestClient.PostAsync<WorkOrderCreationRequestDto, WorkOrderCreationResponseDto>(string.Format("{0}/WorkOrders", Resource), request); 

      return resp; 
     } 
     catch (Exception ex) 
     { 

      throw ex; 
     } 


    } 

今のコードは、のawaitラインになります。この時点で、コードはコード0で終了します。戻り値に決して到達せず、エラーもキャッチに閉じ込められません。

私は朝のトローリングラウンドGoogleの後に完全に失われているので、なぜそれが起こるのか説明することは誰もそれをすべて理解しようとすることができます。

これについていくつか光を当てることができるものは、非常に高く評価されます。

環境はWindows 10周年のアップデートとVisual Studio 2015です。私たちはC#でコーディングしています。

をコメントに反応して

おかげ スティーブ

ADDED私たちは、以下のコードではwoのあるデータオブジェクトを構築します。 _restには、APIのユーザー資格情報が含まれています。

using (SopImportDataService service = new SopImportDataService(_rest)) 
          { 
           string jsonString = JsonConvert.SerializeObject(wo); 

           //WorkOrderCreationResponseDto c = await service.ImportWorkOrders(wo); 

           await service.ImportWorkOrders(wo); 

           Console.WriteLine(""); 
          } 
+1

「ImportWorkOrders」はどのように呼び出されますか? –

+0

こんにちはGlorin、Iveは質問に他のコードスニペットを追加しました。 – MagicWand

+0

おそらく私は別の方法で接近していたはずです:コールスタックのどこかで待たされていないように聞こえ、asyncメソッドが現在のスレッドを生成するとすぐにプログラムが終了しているようです。 –

答えて

0

私に正しい方向を指してくれたグロリンに感謝します。問題は、Progrm.csファイルのMainがAsyncではないことでした。私たちは、ステファン・クリアリーによってAsyncExライブラリを使用し、このように見えるのProgram.csを変更した: -

static class Program 
{ 

    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    static void Main() 
    { 
     try 
     { 
      AsyncContext.Run(() => MainAsync()); 
     } 
     catch (Exception ex) 
     { 
      Console.Error.WriteLine(ex); 
     } 
    } 

    static async Task MainAsync() 
    { 
#if (!DEBUG) 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new UnityService() 
     }; 
     ServiceBase.Run(ServicesToRun); 
#else 
     UnityService myServ = new UnityService(); 
     //myServ.SetupService().ConfigureAwait(true); 

     await myServ.BeginService(); 
#endif 
    } 

これらの変更は不機嫌な問題を解決持っているようです。

ありがとうございました

関連する問題