2016-04-13 27 views
0

Bir WFC Restful hizmeti oluşturuyorum ve her kullanıcı için geçerli olacak bir değişkeni devam ettirme gereği duyuyorum, bu değişkeni tümüyle geçmek zorunda kalmadan bunu başarabileceğim bir yol var mı? çağrılarımÖrnek başına WCF uygulamasında bir değişkene devam et

İşlem boyunca kullanıcının işlemlerini günlüğe kaydetmeye çalışıyorum, istekleri başarısız oldu veya başarılı olduysa, IP adresi, eylemi istediğinde, başarısızlık süresi, vb. Lütfen dikkat, WCF'de yeniyim, şimdiden teşekkürler.

+0

Yapabileceğine eminim, ama yapmamalısınız - [REST uygulamaları vatansız olmalıysa, oturumları nasıl yönetiyorsunuz?] (Http://stackoverflow.com/questions/3105296/if-rest -uygulamalar-sözde-ol-vatansız-nasıl-yapmak-yönetmek-oturumları) – stuartd

+0

Tek bir istek veya birden fazla ilgili istekleri için bir kimlik mi arıyorsunuz? Eğer eski ise o zaman bu hala "vatansız" - sadece bu talepte gerçekleştirilen etkinlikleri ilişkilendiriyorsunuz. –

+0

Tek bir istek arıyorum, çağrı bir clientID ile gelecek ve bu değere, erişilecek her yöntem çağrısına bir bağımlılık yapmak zorunda kalmadan, o çağrı boyunca taşımak istiyorum. – mahlatse

cevap

0

Son zamanlarda üzerinde çalıştım (RESTFUL hariç). HTTP üstbilgileri aracılığıyla bilgi iletebilir ve bu bilgileri hizmet tarafında ayıklayabilirsiniz. Bkz. http://trycatch.me/adding-custom-message-headers-to-a-wcf-service-using-inspectors-behaviors/

+0

Sorunum bu değeri almıyor, uygulamamda birkaç katmanım var. Bu nedenle, bu özel aramaya özgü katmanlardan erişebileceğim bir değer istiyorum. – mahlatse

+0

OperationContext.Current erişiminiz var mı? –

0

İstemci kimliğinin kendisi için bunu koymak için iki yer önerebilirim. Biri OperationContext.Current.IncomingMessageProperties. Başka bir mantıksal işlem tanımlamanıza olanak veren CorrelationManager.StartLogicalOperation olup, bu hizmet isteği, baştan sona - veya birden çok işlem olabilir - ve her işlem için benzersiz bir kimlik alır.

System.Diagnostics ürününün bir parçası olduğu için System.ServiceModel bağımlılıklarını önleyebilirim. (CorrelationManager adı, yapmaya çalıştığınız şeyi bile tanımlar.)

Her iki durumda da araya girmeye bakardım. Bu, her bir yöntemi günlüğe kaydetme ve istemci kimlikleri bilgisi ile kirletmek zorunda kalmadan değeri (depoladığınız her yerde) okumak için ideal bir yoldur. (İletinizden, istemci kimliklerine doğrudan bağımlılıktan kaçınmaya çalıştığınızı gördüm.)

WCF hizmetinize Windsor eklemeye ilişkin bazı documentation. (Bir noktada, blogumda bazı uçtan uca belgeler ekleyeceğim.) Daha sonra, hizmetlerinizi somutlaştırmak için Windsor'u kullandığınızda, bağımlılıkları oluşturmak ve gerçekleştirecekleri etrafa interceptors koymak için de kullanabilirsiniz. Bu bağımlılıklardan önce veya sonra giriş yapmak onların işlerini yapar. Bu engelleyiciler içinde mantıksal işlemlerin yığına erişebilir veya bunları değiştirebilirsiniz.

Birkaç adama atlayarak Windsor adaletini yapmıyorum. Bazı blog gönderileriyle buluşturmak istiyorum. Ama bakmayı tavsiye ederim. Bir çok sebepten dolayı faydalıdır - Hizmetleri ve bağımlılıkları oluşturma şeklimize yardımcı olur.

Güncelleştirme - Bir blog post ekledim - Windsor'u bir WCF hizmetine beş dakikada nasıl ekleyebilirim.

+0

Bunu dün gece yaptığım bir blog gönderisine başvurmak için Windsor'u bir WCF hizmetine hızlı ve kolay bir şekilde nasıl ekleyeceğinizi gösterir. Bu, size, birlikte çalışmak için bazı müdahale araçları verir. Gelecek bir noktada, önleyici konusunda bazı belgeler yapacağım, ancak Windsor'un cevabındaki belgelerin bağlantısı size başlayacaktır. –

İlgili konular