2016-11-21 18 views
0

私は新しい(任意のヘルプは非常に感謝されます)、私は残りのAPIに書き込むために、このクラスを実装しようとしています。それが行うのは、いくつかのデータを渡し、postAsJsonAsyncをサービスに渡すことだけです。 これはC#で書かれ、VB.netに変換されてVB.netアプリケーションソリューションに追加されました。 Uriの別のインスタンスを初期化するとき、それは一度動作し、2回目の呼び出しで失敗します。 例外がスローされました:System.Net.Http.dllequestの 'System.InvalidOperationException'。 "} {"このインスタンスは既に1つ以上の要求を開始しています。プロパティのみ最初の要求を送信する前に変更することができる "} コードここに:。私は間違って何をしていますか、残りのAPIを呼び出す

Imports System.Collections.Generic 
Imports System.Configuration 
Imports System.Linq 
Imports System.Text 
Imports System.Threading.Tasks 
Imports System.Net.Http 
Imports System.Net.Http.Headers 

Namespace Logging 
    Public Class LogMessage 
     Public Property Application As String 
     Public Property Area As String 
     Public Property Activity As String 
     Public Property Description As String 
     Public Property User As String 
    End Class 

    Public Class ActionLogging 

     Public Shared Client As New HttpClient() 

     Public Shared Function AddToActionLog(Activity As String, Description As String, User As String) 
      Dim message = New LogMessage() With { _ 
       .Activity = Activity, _ 
       .Description = Description, _ 
       .User = User, _ 
       .Application = ConfigurationManager.AppSettings("Application"), _ 
       .Area = ConfigurationManager.AppSettings("Area") _ 
      } 

      If Run(message) IsNot Nothing 
       Run(message).Wait()   
      End If 

     End Function 

     Public Shared Function CreateMessage(message As LogMessage) As Uri 
      Dim task = Client.PostAsJsonAsync("Action", message) 
      task.Wait() 
      Dim response As HttpResponseMessage = task.Result 
      response.EnsureSuccessStatusCode() 
      Return response.Headers.Location   
     End Function 


     Public Shared Function Run(message As LogMessage) As Task 
      Client.BaseAddress = new Uri(ConfigurationManager.AppSettings("RestAPIServer")) 
      Client.DefaultRequestHeaders.Accept.Clear() 
      Client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) 

      CreateMessage(message) 

     End Function 

    End Class 
End Namespace 
+1

不明である例外のどの部分あなたの中'ラン() '送る前だけを行うことができますが何? – CodeCaster

+0

はい、私は例外を理解しています、私は 'DefaultRequestHeaders'を一度しかセットアップすることができません。クラスは同じセッション内で何度も呼び出されます。私は呼び出しを行っている方法は明らかに間違っていますが、 –

+0

OK解決策が見つかりました。今後これが他の人に役立つことを願って。 –

答えて

0
Imports System.Configuration 
Imports System.Threading.Tasks 
Imports System.Net.Http 
Imports System.Net.Http.Headers 

Namespace Logging 
    Public Class LogMessage 
     Public Property Application As String 
     Public Property Area As String 
     Public Property Activity As String 
     Public Property Description As String 
     Public Property User As String 
    End Class 

    Public Class ActionLogging 

     Private ReadOnly Shared Client As New HttpClient() With {.BaseAddress = new Uri(ConfigurationManager.AppSettings("RestAPIServer"))} 

     public Sub New() 
      Client.DefaultRequestHeaders.Accept.Clear() 
      Client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))  
     End Sub 

     Public Shared Function AddToActionLog(activity As String, description As String, user As String) 
      Dim message = New LogMessage() With { _ 
       .Activity = Activity, _ 
       .Description = Description, _ 
       .User = User, _ 
       .Application = ConfigurationManager.AppSettings("Application"), _ 
       .Area = ConfigurationManager.AppSettings("Area") _ 
      } 

      SendMessage(message) 

     End Function 

     Private Shared Sub SendMessage(message As LogMessage)    
      Dim task = Client.PostAsJsonAsync("Action", message) 
      task.Wait() 
      Dim response As HttpResponseMessage = task.Result 
      response.EnsureSuccessStatusCode()    
     End Sub 

    End Class 
End Namespace