Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Часто рекомендуют вызывать асинхронные методы, настраивая awaiter, чтобы он не вызывал продолжение в том же контексте синхронизации, из которого он был вызван сам: это увеличивает производительность.
Однако в этом случае информация о запросе, в том числе и его принадлежность пользователю, не будет доступна коду-продолжению, который будет выполняться после асинхронной операции.
Это не просто увеличивает производительность, это позволяет коду работать в ряде весьма специфичных, но тем не менее регулярно встречающихся ситуаций.
Да, ни слова об ELMAH, потому что мы его не используем. Я рассказал о том, что используем мы.
Расскажете, каких ситуаций?
async. В нем, соответственно, нижележеащий асинхронный метод вызывается через блаблаблаAsync().Result. В этот момент поток блокируется на контексте синхронизации asp.net (том самом, про который вы пишете. Если теперь в любом коде ниже вызвать .Result, .Wait или асинхронный метод без .ConfigureAwait(false), они встанут в блокировку на том же контексте синхронизации — и мы успешно получим дедлок. Подробности — у Стивена Клири..Result мы не обращаемся, используем решение из http://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronouslyА почему вы его не используете?
Event message: An unhandled exception has occurred. Event code: 3005 Event detail code: 0 Event time: 21.08.2014 18:21:05 Event ID: 1505644e-6d09-4c01-978e-e3250e964ce0 Event sequence: 388911 Event occurence: 2030 Application information: Machine name: AAA Application domain: AAA Trust level: Full Application Virtual Path: / Application Path: D:\www\AAA\ Process information: Process ID: 188364 Process name: w3wp Accont name: Exception information: Exception type: NullReferenceException Exception message: Object reference not set to an instance of an object. Stack trace: Request information: Request URL: http://aaa/default.aspx Request path: /default.aspx User host address: 192.168.1.1 User: Is authenticated: False
<?xml version="1.0" encoding="utf-16"?> <Event> <Message>An unhandled exception has occurred.</Message> <EventId>1505644e-6d09-4c01-978e-e3250e964ce0</EventId> <Type>Error</Type> <Source>System.Web.HttpResponse</Source> <Code>3005</Code> <DetailCode>0</DetailCode> <Occurrence>2030</Occurrence> <Sequence>388911</Sequence> <TimeCreated>21.08.2014 18:21:05</TimeCreated> <Exception> <Type>NullReferenceException</Type> <Message>Object reference not set to an instance of an object.</Message> <StackTrace>AAA</StackTrace> <ExceptionString>AAA</ExceptionString> </Exception> <System> <MachineName>AAA</MachineName> <InstructionSet>X86</InstructionSet> <ApplicationName>AAA</ApplicationName> <DomainName>/LM/W3SVC/1/ROOT-4</DomainName> <Path>D:\www\AAA\</Path> </System> <Thread> <IsImpersonating>False</IsImpersonating> <ThreadId>63</ThreadId> <AccountName>NT AUTHORITY\NETWORK SERVICE</AccountName> </Thread> <Process> <ProcessId>188364</ProcessId> <CurrentProcessId>188364</CurrentProcessId> <ProcessName>w3wp</ProcessName> <AccountName /> </Process> <Iis> <VirtualPath>/</VirtualPath> <TrustLevel>Full</TrustLevel> <Request> <Url>http://AAA/default.aspx</Url> <User Name="" AuthenticationType="" IsAuthenticated="False">System.Security.Principal.GenericIdentity</User> <RequestPath>/default.aspx</RequestPath> <UserHostAddress>192.168.1.1</UserHostAddress> <UserAgent>AAA</UserAgent> </Request> </Iis> </Event>
Некоторые аспекты логирования ASP.NET-сайта