Как зарегистрировать связь WebService, работающего на IIS 6.0? - PullRequest
2 голосов
/ 13 апреля 2010

Я использую ASP.NET WebService на IIS 6.0, который показывает большое количество HTTP 500 (возможно, только исключения из WebService) в журнале на %systemroot%\System32\LogFiles\W3SVC1 на сайте клиента.

Можно ли регистрировать содержимое этих HTTP-ответов и запросов без изменения WebService с использованием IIS или плагина для IIS?

Я думал об использовании Wireshark или Fiddler для отслеживания HTTP-трафика, но я бы предпочел просто включить опцию внутри IIS, чтобы он регистрировал связь (это не должно быть трудным, так как он регистрирует запрошенные URL в любом случае)

Ответы [ 2 ]

4 голосов
/ 21 апреля 2010

Мы сделали это перед использованием log4net .Вот шаги высокого уровня:

Создайте раздел log4net в вашем web.config

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

и ...

...
</system.web>
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="c:\mysvc.log" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="MaximumFileSize" value="1000000" />
      <param name="RollingStyle" value="Size" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <!-- Setup the root category, add the appenders and set the default priority -->
    <root>
      <level value="DEBUG" />
      <!--<priority value="DEBUG" />-->
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

...

В вашем Global.asax.cs вызовите log4net Configure ()

protected void Application_Start(Object sender, EventArgs e)
{
            log4net.Config.DOMConfigurator.Configure();
}

В верхней части файла .cs веб-службы.объявите экземпляр log4net ILog

public class MyService : System.Web.Services.WebService {
{
   private static readonly ILog log = LogManager.GetLogger(typeof(MyService));

В методах веб-службы перехватывайте исключения и регистрируйте их

[WebMethod]
public void DoSomething()
{
  try
  {
     // business logic
  }
  catch(Exception ex)
  {
     log.Error("Something bad happened", ex);
     throw;
  }
}

После этих шаговв приведенном выше примере любые исключения будут отображаться в c: \ mysvc.log

3 голосов
/ 21 апреля 2010

Создайте HTTPModule и настройте его в вашей конфигурации ASP.NET. Вам не нужно изменять код существующей веб-службы (вам даже не нужны исходные коды), вы просто настраиваете HTTPModule в своем файле Web.config.

В HTTPModule прислушивайтесь к событиям, таким как BeginRequest и EndRequest, и вы сможете регистрировать вход и выход из веб-службы.

Если вам нужно перехватить исключения, сгенерированные в веб-сервисе, вы можете зафиксировать событие Error, как описано здесь и здесь .

Обновление:

Согласно этой странице , вы не можете использовать подход события Error с веб-службами, так как ошибки веб-службы не направляются на событие Error. Microsoft предлагает использовать SOAP Extensions для регистрации ошибок веб-службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...