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
Вероятно, проблема связана с разрешением на запись в каталог журнала, указанный в вашем файле конфигурации.
Если вы не уверены, что пользователь в контексте, дайте права на запись всем пользователям компьютеров.
- Щелкните правой кнопкой мыши в каталоге журнала
- Нажмите вкладку "Безопасность"
- Нажмите править
- В разделе "Имена групп или пользователей" выберите "Имя пользователя пользователя\Пользователи"
- В разделе "Разрешения" разрешено писать
Это сработало для меня.