2010-05-06 15 views
8

Qual è il modo migliore per impostare expect100continue quando si utilizza WebClient (C# .NET). Ho questo codice qui sotto, vedo ancora 100 continuano nell'intestazione. Apache stupido si lamenta ancora con errore 505.webclient and expect100continue

 string url = "http://aaaa.com"; 
     ServicePointManager.Expect100Continue = false; 

     WebClient service = new WebClient();   
     service.Credentials = new NetworkCredential("username", "password"); 
     service.Headers.Add("Content-Type","text/xml"); 

     service.UploadStringCompleted += (sender, e) => CompleteCallback(BuildResponse(e)); 
     service.UploadStringAsync(new Uri(url), "POST", query); 

Nota: Se metto quanto sopra in una console app e farlo funzionare - allora non vedo le intestazioni in violinista. Ma il mio codice è incorporato in una libreria utente che viene caricata da un'app WPF. Quindi, c'è altro da aspettarsi100Continua in termini di thread, inizializzazione, ecc. Ora, penso che sia più il mio problema di codice.

risposta

7

È necessario impostare la proprietà Expect100Continue sul ServicePoint utilizzato per l'URI si sta accedendo:

var uri = new Uri("http://foo.bar.baz"); 
var servicePoint = ServicePointManager.FindServicePoint(uri); 
servicePoint.Expect100Continue = false; 
1

Provare a creare l'instante WebClient dopo aver modificato Expect100Continue su false. Oppure utilizzare un Webrequest invece di un WebClient

1

L'unico modo per farlo è quello di creare un override.

public class ExpectContinueAware : System.Net.WebClient 
    { 
     protected override System.Net.WebRequest GetWebRequest(Uri address) 
     { 
      System.Net.WebRequest request = base.GetWebRequest(address); 
      if (request is System.Net.HttpWebRequest) 
      { 
       var hwr = request as System.Net.HttpWebRequest; 
       hwr.ServicePoint.Expect100Continue = false; 
      } 
      return request; 
     } 
    } 

Questo funziona perfettamente.

+0

Questa dovrebbe essere la risposta accettata. Solo questo approccio consente di impostare la base Expect100Continue per richiesta –