Erros detalhados não estão funcionando para o serviço WCF no IIS

2

Se eu fosse alterar o arquivo web.config para ter erros nele, só vejo o padrão 500 - Internal Server Page.

Apesar de definir o modo Páginas de erro como Detalhado, não consigo ver uma mensagem de erro detalhada. Como eu faço isso?

O motivo é que eu estou querendo fazer alterações em um serviço WCF para adicionar rastreamento, mas isso dá um erro 500, então eu quero ver o que é este erro 500.

Eu tenho o seguinte no arquivo web.config:

<system.webServer>
    <httpErrors errorMode="Detailed" />
...
</system.webServer>

<system.web>
    <customErrors mode="Off" />
...
</system.web>
    
por Marcus 24.01.2013 / 18:44

2 respostas

1

O rastreamento do WCF pode ser mais complexo para configurar as configurações habituais do web.config para um site do IIS.

Se você deseja que as informações sejam retornadas ao cliente (o que deve ser feito apenas no desenvolvimento), tente a configuração includeExceptionDetailInFaults:

  <system.serviceModel>
    <serviceBehaviors>
      <behavior name="metadataAndDebugEnabled">
        <serviceDebug
          includeExceptionDetailInFaults="true" />
        <serviceMetadata
          httpGetEnabled="true"
          httpGetUrl="" />
      </behavior>
    </serviceBehaviors>
  </system.serviceModel>

link

No entanto, uma ferramenta muito mais útil é o rastreamento para um arquivo que você pode processar com o aplicativo Service Trace Viewer. Isso geralmente está localizado em: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svctraceviewer.exe em sua máquina onde você tem o SDK de desenvolvimento do Windows instalado.

Configurar o rastreamento do link

Ferramenta do Visualizador de rastreamento de serviço (SvcTraceViewer.exe)
link

Você pode registrar a atividade no nível de transporte e, se tiver segurança de mensagem, atividade de mensagem. Normalmente, um arquivo separado é criado para cada um. Um exemplo de uma maneira de configurar:

<system.diagnostics>
  <sources>
    <!-- NOTE: change to switchValue="Warning" for production -->
    <!--source name="System.ServiceModel" switchValue="Warning" propagateActivity="true"-->      
    <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true">
      <listeners>
        <add type="System.Diagnostics.DefaultTraceListener" name="Default">
          <filter type=""/>
        </add>
        <add name="ServiceModelTraceListener">
          <filter type=""/>
        </add>
      </listeners>
    </source>
    <!-- NOTE: change to switchValue="Warning" for production -->
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
      <listeners>
        <add type="System.Diagnostics.DefaultTraceListener" name="Default">
          <filter type=""/>
        </add>
        <add name="ServiceModelMessageLoggingListener">
          <filter type=""/>
        </add>
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add initializeData="C:\logs\app_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
      <filter type=""/>
    </add>
    <add initializeData="C:\logs\app_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
      <filter type=""/>
    </add>
  </sharedListeners>
</system.diagnostics>

Supondo que tudo esteja configurado corretamente, os arquivos serão gerados. Quando a exceção ocorre, você pode copiar o arquivo para a máquina em que o svctraceviewer está instalado e abri-lo. Normalmente, você pode navegar para o datetime quando o problema ocorreu e encontrá-lo. Se você está peneirando muita atividade, o svctraceviewer tem excelente filtragem. As exceções aparecem destacadas como vermelhas no painel esquerdo. Você pode clicar na exceção para encontrar os detalhes da exceção.

    
por 27.01.2013 / 18:51
0

Verifique se a opção retail mode não está definida como true no arquivo machine.config .

Parece algo assim:

<configuration>
    <system.web>
          <deployment retail=”true”/>
    </system.web>
</configuration>

Quando isso estiver definido como true, a depuração e o rastreamento de solicitações serão desativados e os erros personalizados estarão sempre ativados. Defina como falso.

Para obter o caminho para o machine.config que está sendo usado pelo ambiente de tempo de execução, imprima-o no ASP.NET assim:

<%
string machineConfPath = 
  System.Runtime.InteropServices.RuntimeEnvironment.SystemConfigurationFile;
Response.Write("System configuration file: {0}", machineConfPath);
%>
    
por 27.01.2013 / 17:39