Aracılığıyla paylaş


Aktarma

Bu konuda, Windows Communication Foundation (WCF) etkinlik izleme modelinde aktarım açıklanmaktadır.

Aktarım Tanımı

Etkinlikler arasındaki aktarımlar, uç noktalar içindeki ilgili etkinliklerdeki olaylar arasındaki nedensel ilişkileri temsil eder. İki etkinlik, bu etkinlikler arasındaki denetim akışlarıyla ilgili aktarımlarla ilgilidir, örneğin, etkinlik sınırlarını aşan bir yöntem çağrısı. WCF'de, hizmette baytlar geldiğinde, Listen At etkinliği, mesaj nesnesinin oluşturulduğu Receive Bytes etkinliğine aktarılır. Uçtan uca izleme senaryolarının ve bunların ilgili etkinlik ve izleme tasarımlarının bir listesini görmek için, bkz End-To-End İzleme Senaryoları.

Aktarım izlemelerini yaymak için aşağıdaki yapılandırma kodunda gösterildiği gibi izleme kaynağındaki ayarını kullanın ActivityTracing .

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">  

Uç Noktalardaki Etkinlikleri Ilişkilendirmek için Aktarım Kullanma

Etkinlikler ve aktarımlar, kullanıcının hatanın kök nedenini olası bir şekilde bulmasına izin verir. Örneğin, M ve N bileşenlerinde sırasıyla M ve N etkinlikleri arasında ileri geri aktarım yaptığımızda ve M'ye geri aktarıldıktan hemen sonra N'de bir kilitlenme oluşursa, bunun büyük olasılıkla N'nin verileri M'ye geri geçirmesi sonucuna varabiliriz.

M ile N arasında denetim akışı olduğunda M etkinliğinden N etkinliğine bir aktarım izlemesi yayılır. Örneğin, etkinliklerin sınırlarını aşan bir yöntem çağrısı nedeniyle N, M için bazı çalışmalar gerçekleştirir. N zaten var olabilir veya oluşturulmuş olabilir. N, M için bazı çalışmalar gerçekleştiren yeni bir aktivite olduğunda M tarafından başlatılır.

M'den N'ye bir aktarım yapılmasından sonra, N'den M'ye geri aktarım gerçekleşmeyebilir. Bunun nedeni, M'nin N'de bir iş oluşturabilmesi ve N'nin bu işi ne zaman tamamladığını izlememesidir. Aslında M, N görevini tamamlamadan önce sonlandırılabilir. Bu, Dinleyici etkinliklerini (N) oluşturan ve ardından sonlandıran "Open ServiceHost" etkinliğinde (M) gerçekleşir. N'den M'ye geri aktarım, N'nin M ile ilgili çalışmayı tamamlamış olduğu anlamına gelir.

N, M ile ilgili olmayan diğer işlemleri gerçekleştirmeye devam edebilir; örneğin, farklı oturum açma etkinliklerinden oturum açma isteklerini (M) almaya devam eden mevcut bir kimlik doğrulayıcı etkinliği (N).

M ve N etkinlikleri arasında iç içe bir ilişki olması şart değildir. Bunun iki nedeni olabilir. İlk olarak, M etkinliği N'yi başlattığı halde, N'de gerçekleştirilen gerçek işlemeyi izlemez. İkincisi, N zaten mevcut olduğunda.

Aktarımlar Örneği

Aşağıda iki aktarım örneği listeledik.

  • Bir hizmet konağı oluşturduğunuzda, oluşturucu çağıran koddan denetim kazanır veya çağıran kod oluşturucuya aktarır. Oluşturucu yürütmeyi bitirdiğinde, denetimi çağıran koda döndürür veya oluşturucu çağıran koda geri aktarır. Bu, iç içe ilişki durumudur.

  • Dinleyici, aktarım verilerini işlemeye başladığında, yeni bir iş parçacığı oluşturur ve kontrol ve veriyi işlemek için uygun bağlamla birlikte Alma Baytları etkinliğine devreder. bu iş parçacığı isteği işlemeyi bitirdiğinde, Alma Baytları etkinliği dinleyiciye hiçbir şey geçirmez. Bu durumda, aktarım var ancak yeni iş parçacığı etkinliğinin dışına aktarım yok. İki etkinlik birbiriyle ilişkilidir ancak iç içe yerleştirilmemiştir.

Etkinlik Aktarım Sırası

İyi biçimlendirilmiş etkinlik aktarım sırası aşağıdaki adımları içerir.

  1. Yeni bir gAId seçmeyi içeren yeni bir etkinliğe başlayın.

  2. Geçerli etkinlik kimliğinden bu yeni gAId'ye bir aktarım izlemesi gönderimi yap.

  3. TLS'de yeni kimliği ayarlama

  4. Yeni etkinliğin başlangıcını belirtmek amacıyla bir başlangıç izi yayar.

  5. Özgün etkinliğe dönüş aşağıdakilerden oluşur:

  6. Özgün gAId'ye bir transfer izi yayınla

  7. Yeni etkinliğin sonunu belirtmek için bir durdurma izi yayınla.

  8. TLS'yi eski gAId olarak ayarlayın.

Aşağıdaki kod örneği bunun nasıl yapılacağını gösterir. Bu örnek, yeni etkinliğe aktarılırken bir engelleme çağrısı yapıldığını varsayar ve askıya alma/sürdürme izleri içerir.

// 0. Create a trace source  
TraceSource ts = new TraceSource("myTS");  

// 1. remember existing ("ambient") activity for clean up  
Guid oldGuid = Trace.CorrelationManager.ActivityId;  
// this will be our new activity  
Guid newGuid = Guid.NewGuid();

// 2. call transfer, indicating that we are switching to the new AID  
ts.TraceTransfer(667, "Transferring.", newGuid);  

// 3. Suspend the current activity.  
ts.TraceEvent(TraceEventType.Suspend, 667, "Suspend: Activity " + i-1);  

// 4. set the new AID in TLS  
Trace.CorrelationManager.ActivityId = newGuid;  

// 5. Emit the start trace  
ts.TraceEvent(TraceEventType.Start, 667, "Boundary: Activity " + i);  

// trace something  
ts.TraceEvent(TraceEventType.Information, 667, "Hello from activity " + i);  

// Perform Work  
// some work.  
// Return  
ts.TraceEvent(TraceEventType.Information, 667, "Work complete on activity " + i);

// 6. Emit the transfer returning to the original activity  
ts.TraceTransfer(667, "Transferring Back.", oldGuid);  

// 7. Emit the End trace  
ts.TraceEvent(TraceEventType.Stop, 667, "Boundary: Activity " + i);  

// 8. Change the tls variable to the original AID  
Trace.CorrelationManager.ActivityId = oldGuid;

// 9. Resume the old activity  
ts.TraceEvent(TraceEventType.Resume, 667, "Resume: Activity " + i-1);  

Ayrıca bakınız