İstisnalar veya Hata kodları


12

Yerel istemcilerle (windows, C ++) konuşacak bir web hizmeti (SOAP, .Net) oluşturuyoruz ve istemciye hataları iletmenin en iyi yolunun ne olduğunu merak ediyoruz (örneğin, SomethingBad veya kullanıcı bulunamadı gibi) ve istemciye istisna atma veya yukarıdakileri yapmak için bir tür hata kodu modeli kullanma arasında karar veremedi.

İstemci tarafında işlemede neyi tercih edersiniz: hata kodu almak veya hatanın nedenini içeren bir ServerFault istisnasını işlemek?
1) Neden istisna düşünüyoruz: Çünkü sunucu tarafı kodunu çok daha homojen hale getirecek
2) Neden hata kodlarını düşünüyoruz : Çünkü istemci tarafı açısından daha anlamlı olduğunu düşünüyoruz .

2) gerçekten doğruysa, muhtemelen istisnalardan ziyade hata kodlarına gitmek isteriz? Burada durum böyle mi?

Ayrıca, yerel müşteriler yerine yönetilen müşterilerle konuşsaydık cevap değişecek mi?


Sadece biraz açıklama eklemek için: a) Burada en iyi uygulamaları arıyorum ve müşteri tarafından deneyimliyorum (müşteri çok daha karmaşık olduğundan ve istemci kodunu daha basit tutabilirsek, sunucu tarafında işleri halletmeyi tercih ederiz) b) İstemci çok sayıda eski kod içeriyor ve C ++ istisnalarını kullanabilir veya kullanamayabiliriz.
Amit Wadhwa

Bu yardımcı olabilir- www.codeproject.com/KB/cpp/cppexceptionsproetcontra.aspx
Gulshan

Yanıtlar:


8

SOAP'ın bir hata kavramı vardır , sunucu tarafındaki bir hataya bir istisnayı dönüştürebilirsiniz ve istemci proxy'de hata tekrar bir istisnaya dönüştürülebilir. Bu WCF ve Java metro yığınında oldukça iyi çalışır, yerel C ++ istemcileri hakkında yorum yapamaz.

SOA için en iyi uygulama ile ilgili olarak, sadece müşterinin belirli bir hata türünü farklı şekilde ele alması gerekiyorsa bir genel hata ve birkaç spesifik hata tanımlayın. Üretim dağıtımında istemciye hiçbir zaman özel durum yığını izlemesi göndermeyin. Bunun nedeni, teoride sunucu izlemesinin istemci ve güvenlik nedenleriyle bir anlamı olmamasıdır. Sunucudaki tüm hatayı ve yığın izlemesini günlüğe kaydedin ve hatadaki günlüğe benzersiz bir başvuru gönderin. WCF'de bir kılavuz oluşturmak ve ayrıca bir istisnayı SOAP hatasına dönüştürmek için Enterprise Library'den Microsoft Exception Handling bloğunu kullanıyorum.

Microsoft Patterns and Practices'daki rehberliğe bakın .


Teşekkürler bu kulağa hoş geliyor. Oradaki sayfada daha özel bir bağlantı verebilir misiniz?
Amit Wadhwa

Ayrıca UserNotFound vb gibi iş seviyesi hataları hakkında da istisna olarak ele alınmalıdır
Amit Wadhwa

Yasal / beklenen hata modlarını iletmek için kodda Özel Durumlar veya SOAP'taki Hatalar'ı hiç kullanmadığımız projeleri geçmişti. Hata kodları kullandık ve onlarla ne yapacağımıza karar vermek için bunları müşteriye bıraktık. Bulunamayan kullanıcı gerçekten bir hata / istisna değil, bu muhtemelen bir durum kodu olmalıdır.
MrLane

4

Geçenlerde geri arayan bir istisna bildirebilirsiniz Java 6 kütüphaneleri ile bir web hizmeti yaptım (nasıl otomatik olarak yapılır içine bakmadı).

İstemcinin geliştiriciye hata raporunda bir yığın izlemesi sağlama yeteneği çok yararlı olmuştur (yaklaşık bir zaman damgası almanın aksine, oturum açarsanız günlüklerinize bakmanız gerekir).

Yani, geliştiriciler açısından bakıldığında, İstisnalar kullanın.


1
Bunun dogfood ve beta sürümlerinde yararlı olabileceğini kabul ediyorum, ancak gerçek dünya kullanımındaki olay günlüklerinde veya günlük dosyalarında yığın izlerini gerçekten yaymak istiyor musunuz (ve elbette hizmet hakkında ihtiyaç duyduğunuz / işlem yapmak istediğinizden daha fazla ayrıntı açığa çıkarmak mı istiyorsunuz) )
Amit Wadhwa

2
@Amit, bana güven: Üretimde yığın izini veren bir duruma çarparsanız, yığın izini İSTERSİNİZ!

1
İstemci tarafında yığın izlemenin yararı nedir, İstemciye iletmeden önce sunucu tarafındaki tüm istisnaları kesinlikle kaydedeceğiz.
Amit Wadhwa

Ayrıca UserNotFound vb gibi iş seviyesi hataları hakkında da istisna olarak ele alınmalıdır
Amit Wadhwa

-2

Bu bir web hizmetiyse, sunucunun istemci tarafından yakalanacak bir istisna atmasına neden olamazsınız. Arabirimde, sunucunuz, bir dize olsa bile, temel olarak bir tür hata kodu döndürmek zorundadır An exception occurred. Type %s, message %s, stack trace %s.

İstemci tarafına gelince, yanıt okuma kodunuzun bir hata içerip içermediğini görmek için yanıtı kontrol etmesini ve istemci tarafında bir istisna oluşturmasını sağlayabilirsiniz. En azından istisnaları iyi olan dillerde bunu yapmanın çok iyi bir yolu. Bununla birlikte, C ++ iyi bir özel durum teslimine sahip değildir ve C ++ istisnalarından mümkün olduğunca uzakta kalmak iyi bir fikirdir. Daha iyi bir dil kullanamıyorsanız, hata kodlarına sadık kalın.


Sanırım yakalanmamış istisna istemciye ServerFault olarak gider
Amit Wadhwa

3
C ++ veya C ++ istisnalarıyla ilgili yanlış bir şey yoktur. Belirli projeler için C ++ dışında bir dil kullanmanın birçok nedeni vardır, ancak istisna işleme bunlardan biri değildir.
KeithB

Yalnızca en iyi güvenlik uygulamalarına karşı olduğu için değil: İstemci sunucunuzun yığın izlemesinde tam olarak ne yapmalıdır? Yazdırın ve size gönderilsin mi? E-posta olarak gönderilsin mi? Yağlama kağıdı için kullanın?
JensG

@JensG: Eğer bu bir web sitesi değil , bir web servisiyse , müşteri bir hata raporu olarak size e-posta gönderecek kadar profesyonel olmalıdır.
Mason Wheeler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.