Temel olarak, WCF hizmetinden her türlü özel durumu yakalamak ve ProvideFault
yöntemini uygulayarak istemciye göndermek için IErrorHandler
arabirimini uygularım.IErrorHandler kullanarak WCF özel durum işleme
Ancak önemli bir sorunla karşı karşıya geliyorum. Tüm istisnalar, istemciye FaultException
olarak gönderilir, ancak bu, istemciyi hizmette tanımlamış olabileceği belirli istisnaları işlemek için devre dışı bırakır.
Göz önünde bulundurun: OperationContract
uygulamalarından birinde tanımlanmış ve atılmış olan SomeException
. istisna fırlatıldığında, onun Aşağıdaki kodu kullanarak bir arıza dönüştürüldü: Bu bir dize olarak hatayı gönderiyor
var faultException = new FaultException(error.Message);
MessageFault messageFault = faultException.CreateMessageFault();
fault = Message.CreateMessage(version, messageFault, faultException.Action);
ancak istemci gibi genel bir durum yakalamak zorundadır:
try{...}
catch(Exception e){...}
değil: ınvalidoperationexception gibi
SomeException gibitry{...}
catch(SomeException e){...}
sadece özel istisnalar ama sistem istisnalar yukarıdaki işlem kullanılarak yakalandı edilemez.
Bu davranışı nasıl uygulayacağınıza dair herhangi bir fikir var mı?
hangi yöntemi yangın HandleError sonra:
İşte davranış sınıfı var? – KumarHarsh
Yalnızca istemci tarafında bir hata işleyici ekleyebilir miyim? Servis seviyesine değil, ClientBase 'uygulamasına eklemek istiyorum, bu mümkün mü? –
Shimmy
Elbette. Bunun gibi bir yardımcı yöntem kullanıyorum: var fabrika = new ChannelFactory (ciltleme, endpointAddress); fabrika.Endpoint.EndpointBehaviors.Add (yeni PassthroughExceptionHandlingBehavior()); dönüş fabrikası.CreateChannel(); –