2010-05-06 17 views
8

Cuál es la mejor manera de configurar expect100continue cuando se usa WebClient (C# .NET). Tengo este código a continuación, aún veo 100 continuar en el encabezado. El apache estúpido todavía se queja con el error 505.webclient y 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: Si pongo lo anterior en una aplicación de consola y se deja correr - entonces yo no veo las cabeceras de violinista. Pero mi código está incrustado en una biblioteca de usuario cargada por una aplicación WPF. Entonces, ¿hay más para Expect100Continue en términos de hilo, inicialización, etc. Ahora, creo que es más de mi problema de código.

Respuesta

7

Es necesario establecer la propiedad Expect100Continue en el ServicePoint utilizado para el URI que está accediendo:

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

Intente crear la instancia de WebClient después de cambiar Expect100Continue a false. O utilizar un Webrequest en lugar de un WebClient

1

La única manera de hacer esto es crear una anulación.

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; 
     } 
    } 

Esto funciona perfecto.

+0

Esta debería ser la respuesta aceptada. Solo este enfoque permite establecer el Expect100Continue por solicitud –