2016-05-04 9 views
2

Ich habe eine .NET-Anwendung, die ich einige WCF-Traffic-Header auf ändern muss. Die Microsoft-Leute sagten mir, dass es keine Möglichkeit gibt, die Header, die ich in der Anfrage brauche, wirklich zu injizieren und sie mit dem aktuellen Framework aus der Antwort herauszuholen. Ich möchte nur FiddlerCore zur Anwendung hinzufügen, und wenn die Kopfzeile nicht auf der ausgehenden Anfrage von meiner Anwendung vorhanden ist, möchte ich sie hinzufügen. (Wirklich einfach).FiddlerCore Ohne Registrierung als System-Proxy

Ich kann alles zum Laufen bringen, aber die Ereignisse feuern nur, wenn ich die FiddlerApplication als System-Proxy registriere. Ich möchte das für den Benutzer transparent machen, damit es ihre Proxy-Einstellungen im OS nicht vermasselt.

private void Form1_Load(object sender, EventArgs e) 
{ 
    Fiddler.FiddlerApplication.SetAppDisplayName("FiddlerCoreTester"); 

    Fiddler.FiddlerApplication.RequestHeadersAvailable += this.RequestHeadersAvailable; 
    Fiddler.FiddlerApplication.BeforeRequest += this.BeforeRequest; 
    Fiddler.FiddlerApplication.AfterSessionComplete += this.SessionComplete; 
    FiddlerApplication.OnNotification += this.OnNotification; 
    Fiddler.FiddlerApplication.ResponseHeadersAvailable += this.ResponseHeadersAvailable; 

    Fiddler.URLMonInterop.SetProxyInProcess("127.0.0.1:80", "<-loopback>"); 
    Fiddler.FiddlerApplication.Startup(80, false, false); 

    WebClient wc = new WebClient(); 
    string s = wc.DownloadString("http://www.google.com"); 
    System.Windows.Forms.MessageBox.Show(s); 

    Fiddler.FiddlerApplication.Shutdown(); 
} 


private void ResponseHeadersAvailable(Session oSession) 
{ 
} 


private void OnNotification(object sender, NotificationEventArgs e) 
{ 
} 


private void SessionComplete(Session oSession) 
{ 
} 


private void RequestHeadersAvailable() 
{ 
} 

private void BeforeRequest(Fiddler.Session oSession) 
{ 
    if (oSession.RequestHeaders.Exists("TESTHEADER") == false) { 
     oSession.RequestHeaders.Add("TESTHEADER", "TEST"); 
    } 
} 

Die Ereignisse nie in diesem Fall aufgerufen, aber wenn ich diese Umstellung auf die darunter tut:

Fiddler.FiddlerApplication.Startup(80, true, false); 

Wer weiß, wie diese Arbeit zu bekommen?

Vielen Dank

Antwort

0

Sie sollten Ihre webclient Verwendung FiddlerCore als Proxy lassen. Dazu müssen Sie den Proxy des Webclients der Proxy-URL anpassen, auf die Fiddler hört. Jetzt lädt Ihr Webclient die Zeichenfolge durch http://127.0.0.1:80 und Fiddler kann Ihre Anfrage erfassen.

WebClient wc = new WebClient(); 
wc.Proxy = new WebProxy(new Uri("http://127.0.0.1:80")); 
string s = wc.DownloadString("http://www.google.com"); 
Fiddler.FiddlerApplication.Shutdown(); 
Verwandte Themen