Kullanıcı Kodu İzleri Yayma
Windows Communication Foundation (WCF) tarafından oluşturulan izleme verilerini toplamak için yapılandırmada izlemeyi etkinleştirmenin yanı sıra, izlemeleri kullanıcı kodunda program aracılığıyla da yayabilirsiniz. Bu şekilde, tanılama amacıyla daha sonra gözden geçirebileceğiniz izleme verilerini proaktif olarak oluşturabilirsiniz. Bu konuda bunu nasıl yapabileceğiniz açıklanır.
Ayrıca, İzlemeyi Genişletme örneği aşağıdaki bölümlerde gösterildiği gibi tüm kodları içerir.
İzleme Kaynağı Oluşturma
Kullanıcı izleme kaynağı oluşturmak için aşağıdaki kodu kullanabilirsiniz.
TraceSource ts = new TraceSource("myUserTraceSource");
Etkinlik Oluşturma
Etkinlikler mantıksal işlem birimidir. İzlemelerin birlikte gruplanmasını istediğiniz her ana işleme birimi için bir etkinlik oluşturabilirsiniz. Örneğin, hizmete yönelik her istek için bir etkinlik oluşturabilirsiniz. Bunu yapmak için aşağıdaki adımları uygulayın.
Etkinlik kimliğini kapsama kaydedin.
Yeni bir etkinlik kimliği oluşturun.
Kapsamdaki etkinlikten yenisine aktarın, kapsamdaki yeni etkinliği ayarlayın ve bu etkinlik için bir başlangıç izlemesi yayın.
Aşağıdaki kod bunun nasıl yapılacağını gösterir.
Guid oldID = Trace.CorrelationManager.ActivityId;
Guid traceID = Guid.NewGuid();
ts.TraceTransfer(0, "transfer", traceID);
Trace.CorrelationManager.ActivityId = traceID; // Trace is static
ts.TraceEvent(TraceEventType.Start, 0, "Add request");
Kullanıcı Etkinliği İçinde İzlemeLeri Yayma
Aşağıdaki kod bir kullanıcı etkinliği içindeki izlemeleri yayar.
double value1 = 100.00D;
double value2 = 15.99D;
ts.TraceInformation("Client sends message to Add " + value1 + ", " + value2);
double result = client.Add(value1, value2);
ts.TraceInformation("Client receives Add response '" + result + "'");
Etkinlikleri Durdurma
Etkinlikleri durdurmak için eski etkinliğe geri aktarın, geçerli etkinlik kimliğini durdurun ve kapsamdaki eski etkinlik kimliğini sıfırlayın.
Aşağıdaki kod bunun nasıl yapılacağını gösterir.
ts.TraceTransfer(0, "transfer", oldID);
ts.TraceEvent(TraceEventType.Stop, 0, "Add request");
Trace.CorrelationManager.ActivityId = oldID;
Etkinlik Kimliğini Bir Hizmete Yayma
hem istemci hem de hizmet yapılandırma dosyalarında izleme kaynağı için System.ServiceModel
özniteliğini true
olarak ayarlarsanızpropagateActivity
, Add isteği için hizmet işleme, istemcide tanımlanan etkinlikle aynı etkinlikte gerçekleşir. Hizmet kendi etkinliklerini ve aktarımlarını tanımlarsa, hizmet izlemeleri istemcinin yaydığı etkinlikte görünmez. Bunun yerine, kimlikleri istemci tarafından yayılan etkinliğe aktarım izlemeleriyle ilişkili bir etkinlikte görünürler.
Not
propagateActivity
Özniteliği hem istemcide hem de hizmette olarak ayarlanırsatrue
, hizmetin işlem kapsamındaki ortam etkinliği WCF tarafından ayarlanır.
WcF kapsamında bir etkinliğin ayarlanıp ayarlanmadığını denetlemek için aşağıdaki kodu kullanabilirsiniz.
// Check if an activity was set in scope by WCF, if it was
// propagated from the client. If not, ( ambient activity is
// equal to Guid.Empty), create a new one.
if(Trace.CorrelationManager.ActivityId == Guid.Empty)
{
Guid newGuid = Guid.NewGuid();
Trace.CorrelationManager.ActivityId = newGuid;
}
// Emit your Start trace.
ts.TraceEvent(TraceEventType.Start, 0, "Add Activity");
// Emit the processing traces for that request.
serviceTs.TraceInformation("Service receives Add "
+ n1 + ", " + n2);
// double result = n1 + n2;
serviceTs.TraceInformation("Service sends Add result" + result);
// Emit the Stop trace and exit the method scope.
ts.TraceEvent(TraceEventType.Stop, 0, "Add Activity");
// return result;
Kodda Oluşan Özel Durumları İzleme
Kodda bir özel durum oluşturduğunuzda, aşağıdaki kodu kullanarak Uyarı düzeyinde veya yukarı doğru özel durumu izleyebilirsiniz.
ts.TraceEvent(TraceEventType.Warning, 0, "Throwing exception " + "exceptionMessage");
Hizmet İzleme GörüntüleyiciSi Aracında Kullanıcı İzlemelerini Görüntüleme
Bu bölüm, Hizmet İzleme Görüntüleyicisi Aracı (SvcTraceViewer.exe) kullanılarak görüntülendiğinde Genişletme İzleme örneği çalıştırılarak oluşturulan izlemelerin ekran görüntülerini içerir.
Aşağıdaki diyagramda, sol panelde daha önce oluşturulan "İstek ekle" etkinliği seçilidir. Uygulama istemci programını oluşturan diğer üç Matematik işlemi etkinliğiyle (Bölme, Çıkarma, Çarpma) listelenir. Kullanıcı kodu, farklı isteklerdeki olası hata oluşumlarını yalıtmak için her işlem için bir yeni etkinlik tanımladı.
genişletme izleme örneğinde aktarımların kullanımını göstermek için, dört işlem isteğini kapsülleyen bir Hesap makinesi etkinliği de oluşturulur. Her istek için Hesap Makinesi etkinliğinden istek etkinliğine bir ileri geri aktarım yapılır (şekilde sağ üst panelde izleme vurgulanır).
Sol panelde bir etkinlik seçtiğinizde, bu etkinliğin içerdiği izlemeler sağ üst panelde gösterilir. İstek yolundaki her uç noktadaysa propagateActivity
true
, istek etkinliğindeki izlemeler isteğe katılan tüm işlemlerdendir. Bu örnekte, paneldeki 4. sütunda hem istemciden hem de hizmetten izlemeleri görebilirsiniz.
Bu etkinlik aşağıdaki işlem sırasını gösterir:
İstemci Ekle'ye ileti gönderir.
Hizmet, İstek ekle iletisini alır.
Hizmet Yanıt ekle'yi gönderir.
İstemci Yanıt ekle'yi alır.
Tüm bu izlemeler Bilgi düzeyinde yayılmıştır. Sağ üst panelde bir iz tıklanması, sağ alt panelde bu izlemenin ayrıntılarını gösterir.
Aşağıdaki diyagramda, hesap makinesi etkinliğinden ve hesap makinesi etkinliğine aktarma izlemelerinin yanı sıra istek etkinliği başına biri istemci, diğeri hizmet için olmak üzere iki çift Başlangıç ve Durdurma izlemesi (her izleme kaynağı için bir tane) görüyoruz.
Oluşturma zamanına göre etkinliklerin listesi (sol panel) ve iç içe etkinlikleri (sağ üst panel)
Hizmet kodu, istemcinin de oluşturmasına neden olan bir özel durum oluşturursa (örneğin, istemci isteğine yanıt almadığında), hem hizmet hem de istemci uyarısı veya hata iletileri doğrudan bağıntı için aynı etkinlikte gerçekleşir. Aşağıdaki görüntüde, hizmet "Hizmet bu isteği kullanıcı kodunda işlemeyi reddediyor" ifadesini içeren bir özel durum oluşturur. İstemci ayrıca "Sunucu bir iç hata nedeniyle isteği işleyemedi" ifadesini içeren bir özel durum oluşturur.
Aşağıdaki görüntülerde, istek etkinlik kimliği yayılırsa belirli bir istek için uç noktalar arasındaki hataların aynı etkinlikte göründüğü gösterilir:
Sol panelde Çarpma etkinliğine çift tıklanması, her işlem için Çarpma etkinliğinin izleriyle birlikte aşağıdaki grafiği gösterir. İstek işlenemediğinden istemcide uyarılar ve hatalar tarafından izlenen hizmette ilk olarak bir uyarı (özel durum oluştu) olduğunu görebiliriz. Bu nedenle uç noktalar arasındaki nedensel hata ilişkisini ima edebilir ve hatanın kök nedenini türetebiliriz.
Aşağıdaki görüntüde hata bağıntısının grafik görünümü gösterilmektedir:
Önceki izlemeleri almak için, kullanıcı izleme kaynakları ve propagateActivity=true
izleme kaynağı için System.ServiceModel
ayarlarızActivityTracing
. Kullanıcı kodunun System.ServiceModel
kullanıcı kodu etkinlik yayma özelliğini etkinleştirmesi için izleme kaynağı için ayarlanmadıActivityTracing
. (ServiceModel etkinlik izleme açık olduğunda, istemcide tanımlanan etkinlik kimliği hizmet kullanıcı koduna tüm yol boyunca yayılmaz; Ancak, istemci ve hizmet kullanıcı kodu etkinliklerini ara WCF etkinlikleriyle ilişkilendirir.)
Etkinlikleri tanımlama ve etkinlik kimliğini yayma, uç noktalar arasında doğrudan hata bağıntısı gerçekleştirmemizi sağlar. Bu şekilde, bir hatanın kök nedenini daha hızlı bir şekilde bulayabiliriz.