Wcf пытается настроить трассировку для отладки, не записывая в файл журнала

вот мой web.config, запустивший службу WCF в приложении на IIS7, но ничего не записывается в указанный файл. разрешение на файл предоставлено всем.

<system.diagnostics>
  <sources>
   <source name="System.ServiceModel" switchValue="Information, ActivityTracing,     error, warning, critical" propagateActivity="true">
    <listeners>
     <add name="traceListener"
  type="System.Diagnostics.TextWriterTraceListener"
  initializeData="c:\log\tracestext.log" />

    </listeners>
  </source>
  </sources>
 </system.diagnostics>

Я могу добавить ссылку на службу просто отлично.
Затем я пытаюсь вызвать службу из приложения Windows и через несколько минут получить сообщение об ошибке на компьютере, на котором запущено приложение Windows. "Клиент не может завершить согласование безопасности в течение установленного таймаута (00:00:00). текущая переговорная нога - 1 (00:00:00)."

но абсолютно ничего не записывается в файл журнала трассировки, указанный в config.

Есть ли что-то еще для включения трассировки? спасибо за помощь

EDIT: раздел "sources" теперь соответствует разделу, рекомендованному здесь: http://msdn.microsoft.com/en-us/library/aa702726.aspx

Я добавил раздел "диагностика. messagelogging" в "system.servicemodel"

и средство просмотра событий показывает: "Ведение журнала сообщений включено. Чувствительная информация может регистрироваться в ясной форме, даже если она была зашифрована на проводе: например, тела сообщений.  Название процесса: w3wp  Идентификатор процесса: 1784 "

но файл журнала все еще пуст

Ответ 1

Да - вы только что определили источник трассировки и прослушиватели .NET, но вы еще не указали WCF на самом деле сделать трассировку!

Вам также потребуется:

<system.serviceModel>
    <diagnostics>
        <messageLogging 
            logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false"
            logMalformedMessages="true" logEntireMessage="true"
            maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" />
    </diagnostics>
</system.serviceModel>

Эти два раздела объединенной конфигурации должны делать это!

Чтобы сразу отправить ваши сообщения в файл журнала, вы можете добавить настройки в раздел <system.diagnostics>:

<system.diagnostics>
    ... everything you already have....

    <trace autoflush="true" />
</system.diagnostics>

Ответ 2

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

Идентификатор можно найти в консоли управления IIS 7. Выберите пул приложений, который использует ваше веб-приложение. Нажмите "Дополнительные настройки"... В окне свойств найдите поле идентификации. Это может сказать Network Service. Это учетная запись, для которой требуется разрешение на запись в папку вывода журнала.

Если у вас уже есть файл журнала в этом каталоге, попробуйте удалить его и позволить фреймворку создать его.

Надеюсь, что это поможет.

Ответ 3

  • Убедитесь, что вы настроили параметры system.diagnostics и Разработаны разделы System.serviceModel/diagnostics.

  • Убедитесь, что они настроены в файле правильно App.config/Web.config. Следует отметить, что несколько файлы конфигурации могут существовать в проекте, а используемый, зависит от Конфигурация сборки.

Лично у меня был тот же самый симптом, пока я не заметил, что я помещал разделы под app.config (в моем случае трассировка на стороне клиента) вместо app.DebugLocal.config. Позднее был использован, так как моя конфигурация сборки была установлена ​​на DebugLocal.

Ответ 4

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

  • Щелкните правой кнопкой мыши в каталоге журнала
  • Нажмите вкладку "Безопасность"
  • Нажмите править
  • В разделе "Имена групп или пользователей" выберите "Имя пользователя пользователя\Пользователи"
  • В разделе "Разрешения" разрешено писать

Это сработало для меня.