Aracılığıyla paylaş


User-Code İzlemeleri Yayma

Windows Communication Foundation (WCF) tarafından oluşturulan izleme verilerini toplamak için yapılandırmada izlemeyi etkinleştirmenin yanı sıra, izlemeleri kendi yazılım kodunuzda kodlama yoluyla da oluşturabilirsiniz. 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österilen tüm kodu 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.

  1. Etkinlik kimliğini bağlamda kaydedin.

  2. Yeni bir etkinlik kimliği oluşturun.

  3. 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 İzler Yayımlama

Aşağıdaki kod, bir kullanıcı etkinliği içindeki izleri üretir ve 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 Aktarma

Eğer istemci ve hizmet yapılandırma dosyalarında izleme kaynağı için propagateActivity özniteliğini true olarak ayarlarsanız, 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 izleri istemci tarafından yayılan etkinlikte görünmez. Bunun yerine, istemci tarafından kimliği yayılan etkinlikle aktarım izleri yoluyla ilişkili bir başka etkinlikte görünürler.

Uyarı

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;

Koddaki Atılan İstisnaları İ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 bir istek için Hesap Makinesi etkinliğinden istek etkinliğine bir ileri ve geri aktarım gerçekleşir (şekilde sağ üst panelde iz 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ç noktada propagateActivitytrue olduğunda, istek etkinliğindeki izlemeler, isteğe katılan tüm işlemlerden gelir. 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:

  1. İstemci Ekle'ye ileti gönderir.

  2. Hizmet, İstek ekle iletisini alır.

  3. Hizmet, Yanıt Ekle'yi gönderir.

  4. İstemci Yanıt ekle'yi alır.

Tüm bu izler Bilgi düzeyinde kaydedilmiştir. Sağ üst paneldeki bir izleğe tıklamak, sağ alt panelde o izleğin ayrıntılarını gösterir.

Aşağıdaki diyagramda, hesap makinesi etkinliğinden hesap makinesi etkinliğine aktarma izlerini görüyoruz. Ayrıca her istek etkinliği için biri istemciye, diğeri hizmete ait olan iki çift Başlangıç ve Durdurma izlerini (her iz kaynağı için bir tane) de görüyoruz.

İz İzleyicisi: Kullanıcı kodu izlerini yayma Oluşturulma zamanına göre etkinliklerin listesi (sol panel) ve iç içe geçmiş etkinlikleri (sağ üst panel)

Hizmet kodu, istemcinin de bir özel durum oluşturmasına neden olan bir hata oluşturursa (örneğin, istemci isteğine yanıt almadığında), hem hizmet hem de istemci uyarı veya hata iletileri doğrudan ilişkilendirme 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ü, istek etkinlik kimliğinin yayılması durumunda belirli bir istek için uç noktalar arasındaki hataların aynı etkinlikte göründüğünü gösterir.

Belirli bir isteğin uç noktaları arasındaki hataları gösteren ekran görüntüsü.

Sol paneldeki Çarpma etkinliğine çift tıklanması, her ilgili işlem için Çarpma etkinliğinin izlerini içeren aşağıdaki grafiği gösterir. Hizmette ilk olarak bir uyarı olduğunu görebiliriz (istisna fırlatıldı), bu da istek işlenemediğinden istemcide uyarı ve hatalarla devam etmektedir. 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:

Hata bağıntısının grafik görünümünü gösteren ekran görüntüsü.

Önceki izlemeleri almak için, kullanıcı izleme kaynakları için ActivityTracing ve propagateActivity=true izleme kaynağı için System.ServiceModel ayarlarız. Biz, kullanıcı kodunun kullanıcı kodu etkinliği yaymasını sağlamak için ActivityTracing'u System.ServiceModel iz kaynağı için ayarlamadık. (ServiceModel etkinlik izleme açık olduğunda, istemcide tanımlanan etkinlik kimliği hizmet kullanıcı koduna tam olarak iletilmez; Ancak, Geçişler 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.

Ayrıca bakınız