Как я могу создать рабочее расширение dll для Fiddler с MS V C # 2008 EE? - PullRequest
2 голосов
/ 22 февраля 2010

этот вопрос относится к Вопросу изменения .

Требования изменились, поэтому мне нужно использовать расширение в Fiddler с той же задачей.

Как я могу создать расширение с C #, которое будет исключено Fiddler?

Я могу создать dll в C # - я также попробовал старый компилятор .net 2.0 для него .. Сначала я попытался использовать свое расширение в папке Program-File, а затем в папке MyDocuments (два упомянутых на Fiddler -Website).

Если я загружаю extension-dll из Fiddler-extensions, его можно использовать после перезапуска Fiddler.

Если я пытаюсь заменить мой файл .dll во время работы Fiddler, Windows сообщает мне, что .dll используется программой и не может быть изменена сейчас. Расширение не показано на вкладке расширений.

Прямо сейчас я застрял в тупике, не зная, что я должен искать сейчас, так как, похоже, никто другой не имеет этой проблемы.

Может быть, это нужно, чтобы ответить на мой вопрос:

с помощью: MS Visual C # 2008 Express Edition Мой проект дополнительно связан с Fiddler и System.Windows.Forms (не нашел System.Windows.WinForms, который упоминается в Fiddler).

использовал [assembly: Fiddler.RequiredVersion("2.2.7.0")] в моем расширении, а мой Fiddler - 2.2.8.x.

, если это представляет интерес для ответов: я использовал описание IFiddlerExtension-Help также для получения необходимого кода.

Моя главная проблема в том, что Fiddler не дает мне никаких замечаний или сбоев, но, похоже, находит расширение, но не может его использовать по какой-то причине.

    using System;
using System.Windows.Forms;
using Fiddler;

[assembly: Fiddler.RequiredVersion("2.2.7.0")]

namespace validate_js
{
    public interface IFiddlerExtension
    {
        // Called when Fiddler User Interface is fully available
        void OnLoad();

        // Called when Fiddler is shutting down
        void OnBeforeUnload();
    }
    public interface IAutoTamper : IFiddlerExtension
    {
        // Called before the user can edit a request using the Fiddler Inspectors
        void AutoTamperRequestBefore(Session oSession);

        // Called after the user has had the chance to edit the request using the Fiddler Inspectors, but before the request is sent
        void AutoTamperRequestAfter(Session oSession);

        // Called before the user can edit a response using the Fiddler Inspectors, unless streaming.
        void AutoTamperResponseBefore(Session oSession);

        // Called after the user edited a response using the Fiddler Inspectors.  Not called when streaming.
        void AutoTamperResponseAfter(Session oSession);

        // Called Fiddler returns a self-generated HTTP error (for instance DNS lookup failed, etc)
        void OnBeforeReturningError(Session oSession);
    }

    public class Violin : IAutoTamper
    {
        string sUserAgent = "";

        public Violin()
        {

            sUserAgent = "Violin";

        }
        public void OnLoad()
        {

            string strResponse;
            FiddlerApplication.Log.LogString("S&T-Script wird ausgeführt.");
            Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS)
            {
                strResponse = oS.GetResponseBodyAsString(); // safe BodyContent in strResponse
                if (System.String.Compare(strResponse, "getElementbyID", true) == 0)
                {

                    FiddlerApplication.Log.LogString("getElementbyID found - could have a different attitude in IE 8. Please check");

                }

            };

        }
        public void OnBeforeUnload()
        {

        }

        public void AutoTamperRequestBefore(Session oSession)
        {
            oSession.oRequest["User-Agent"] = sUserAgent;
        }
        public void AutoTamperRequestAfter(Session oSession) { }
        public void AutoTamperResponseBefore(Session oSession) { }
        public void AutoTamperResponseAfter(Session oSession) { }
        public void OnBeforeReturningError(Session oSession) { }

    }


}

Буду признателен за любую возможную помощь ...

1 Ответ

2 голосов
/ 24 февраля 2010

Вы перераспределяете интерфейсы IAutoTamper и IFiddlerExtension в своем пространстве имен, что «скрывает» реальные интерфейсы в пространстве имен Fiddler.

Если вы удалите эти переопределения интерфейса из своего кода (оставив только свой класс Violin), вы обнаружите, что ваша DLL работает отлично.

...