В веб-службе C # я могу найти уникальный идентификатор потока или какой-то идентификатор для целей ведения журнала? - PullRequest
0 голосов
/ 12 февраля 2009

Я использую веб-сервис в C # .NET 3.5. Я хочу регистрировать различные звонки. Однако, поскольку многие пользователи одновременно используют одни и те же функции, сложно определить, к какому из них относится вызов журнала.

В жизни C ++ мы использовали идентификатор потока. Что эквивалентно в C #?

Я пытался

System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.Id;

Однако каждый раз у меня один и тот же идентификатор.

Ответы [ 6 ]

3 голосов
/ 12 февраля 2009

Mayhaps Thread.CurrentThread.ManagedThreadId

1 голос
/ 14 февраля 2009

Если вы используете MS Ent Lib и их регистратор, вы можете использовать класс Tracer, чтобы получить хорошую регистрацию:

Пример

public Output MyServiceMethod(Input input, string transactionId)
{
    using(new Tracer("MyServiceMethod: " + transactionId))
    {
        ... stuff ...
        return output;
    }
}

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

0 голосов
/ 14 февраля 2009

Взгляните на ASP.NET Health Monitoring. См. Обзор мониторинга состояния ASP.NET . События, которые он регистрирует по умолчанию, содержат больше информации, чем вы, вероятно, хотите:

Log Name:      Application
Source:        ASP.NET 2.0.50727.0
Date:          2/12/2009 12:57:14
Event ID:      1309
Task Category: Web Event
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      Laptop
Description:
Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 2/12/2009 12:57:14 
Event time (UTC): 2/12/2009 17:57:14 
Event ID: b08e9d3be7364690a660254dc0a29b6d 
Event sequence: 5 
Event occurrence: 4 
Event detail code: 0 

Application information: 
    Application domain: bba4cebc-1-128789349683310000 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\Users\John Saunders\Documents\MVP\projects\WebServices\GeneralSoln\WebService1\ 
    Machine name: LAPTOP 

Process information: 
    Process ID: 11560 
    Process name: WebDev.WebServer.exe 
    Account name: Laptop\John Saunders 

Exception information: 
    Exception type: MissingMethodException 
    Exception message: Method not found: 'Void System.ServiceModel.Diagnostics.EventLogger.UnsafeLogEvent(System.Diagnostics.TraceEventType, System.ServiceModel.Diagnostics.EventLogCategory, System.ServiceModel.Diagnostics.EventLogEventId, Boolean, System.String[])'. 

Request information: 
    Request URL: http://localhost:5305/Enumerations.asmx 
    Request path: /Enumerations.asmx 
    User host address: 127.0.0.1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: Laptop\John Saunders 

Thread information: 
    Thread ID: 4 
    Thread account name: Laptop\John Saunders 
    Is impersonating: False 
    Stack trace:    at System.Runtime.CompilerServices.RuntimeHelpers.PrepareDelegate(Delegate d)
   at System.AppDomain.add_UnhandledException(UnhandledExceptionEventHandler value)
   at System.ServiceModel.ServiceHostingEnvironment.HookADUnhandledExceptionEvent()
   at System.ServiceModel.ServiceHostingEnvironment.EnsureInitialized()
   at System.ServiceModel.ServiceHostingEnvironment.OnEnsureInitialized(Object state)
   at System.ServiceModel.PartialTrustHelpers.PartialTrustInvoke(ContextCallback callback, Object state)
   at System.ServiceModel.ServiceHostingEnvironment.SafeEnsureInitialized()
   at System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


Custom event details: 

Event Xml:
0 голосов
/ 14 февраля 2009

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

Начать очень легко.

0 голосов
/ 12 февраля 2009

Я бы использовал

System.Threading.Thread.CurrentThread.ManagedThreadId

Кроме того, поскольку это веб-служба, если клиенты приходят с разных IP-адресов, вы также можете зарегистрировать это, что также может помочь в регистрации / диагностике.

0 голосов
/ 12 февраля 2009

Вы можете использовать Thread.CurrentThread.ManagedThreadId.

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