Nouvelle Tentative De HttpClient Demandes Infructueuses

Je fais construire une fonction qui étant donné un HttpContent Objet, sera questions de la demande et de nouvelles tentatives en cas d'échec. Cependant, je reçois des exceptions dire que HttpContent Objet est éliminé après la publication de la demande. Est-il de toute façon pour copier ou reproduire le HttpContent Objet afin que je puisse émettre des demandes multiples.

 public HttpResponseMessage ExecuteWithRetry(string url, HttpContent content)
 {
  HttpResponseMessage result = null;
  bool success = false;
  do
  {
      using (var client = new HttpClient())
      {
          result = client.PostAsync(url, content).Result;
          success = result.IsSuccessStatusCode;
      }
  }
  while (!success);

 return result;
} 

//Works with no exception if first request is successful
ExecuteWithRetry("http://www.requestb.in/xfxcva" /*valid url*/, new StringContent("Hello World"));
//Throws if request has to be retried ...
ExecuteWithRetry("http://www.requestb.in/badurl" /*invalid url*/, new StringContent("Hello World"));

(Évidemment, je n'essayez pas indéfiniment, mais le code ci-dessus est essentiellement ce que je veux).

Il donne de cette exception

System.AggregateException: One or more errors occurred. ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Net.Http.StringContent'.
   at System.Net.Http.HttpContent.CheckDisposed()
   at System.Net.Http.HttpContent.CopyToAsync(Stream stream, TransportContext context)
   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Submission#8.ExecuteWithRetry(String url, HttpContent content)

Est-il de toute façon pour dupliquer un HttpContent de l'Objet ou de la réutiliser?

  • D'autres réponses sont bonnes pour mettre en œuvre une nouvelle tentative. Mais le vrai problème ici, c'est parce que votre HttpContent est disposé après votre post. Vous avez besoin de re-créer le StringContent avant chaque tentative. Vous n'aurez pas une ObjectDisposedException comme ceci
InformationsquelleAutor samirahmed | 2013-10-08