Как получить значения параметров из веб-службы - PullRequest
2 голосов
/ 01 марта 2011

У меня есть веб-служба (страница ASP.NET .asmx), и для целей отладки мне нужно регистрировать все вызовы веб-службы, включая значения всех параметров, передаваемых в каждый вызов. Таким образом, первое, что должен сделать каждый WebMethod - это записать его состояние с подробностями всех значений параметров, передаваемых ему.

Пока все хорошо. Сложность в том, что мне также нужен автоматизированный способ получения значений параметров - существует довольно много веб-методов с разными сигнатурами, и некоторые из них имеют до ~ 30 параметров, поэтому ручное кодирование для каждого конкретного параметра, вероятно, будет чрезвычайно подвержено ошибкам , Я предпочел бы иметь возможность вызывать метод, который просматривает текущий контекст Http и автоматически использует его для захвата и анализа того, что было передано клиентом.

Но я попал в ловушку. Когда я смотрю на HttpContext.Current.Request, оказывается, что коллекции Form и QueryString пусты. Так что, если аргументы, переданные веб-методу, отсутствуют ни в одной из этих коллекций, где они будут? Кто-нибудь знает, как я могу их получить?

Ответы [ 3 ]

1 голос
/ 01 марта 2011

Вы можете использовать методы АОП для этой задачи. Учитывая PostSharp , вы можете создать собственный аспект, подобный этому:

[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        Trace.WriteLine(string.Format("Entering {0}", args.Method.Name));

        for (int i = 0; i < args.Arguments.Count; i++)
        {
            Trace.WriteLine(string.Format("    {0}", args.Arguments.GetArgument(i)));
        }
    }
}

, а затем примените его к методам вашего веб-сервиса:

[WebMethod, Trace]
public string HelloWorld()
{
    return "Hello World";
}
1 голос
/ 01 марта 2011

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

0 голосов
/ 01 марта 2011

SOAP Extentions - лучший выбор. Вот еще один пример получения запроса SOAP и ответа SOAP в виде XML. Все, что вам нужно сделать, это проанализировать XML, чтобы получить пары значений имени параметра.

...