我们使用java-webservice将某些类型的数据导入我们的系统。所以他们给了我们一个.wsdl和Visual Studio生成了c#-code。
到目前为止一切正常,但我如何处理由webservice定义的异常?
异常类看起来像这样:
public partial class ServiceException : object, System.ComponentModel.INotifyPropertyChanged {
private string causeMessageField;
private int errorCodeField;
private MessageEvent[] listField;
private string messageField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public string causeMessage {
get {
return this.causeMessageField;
}
set {
this.causeMessageField = value;
this.RaisePropertyChanged("causeMessage");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public int errorCode {
get {
return this.errorCodeField;
}
set {
this.errorCodeField = value;
this.RaisePropertyChanged("errorCode");
}
}
正如您所看到的,ServiceException类甚至不是从System.Exception派生的。那我怎么能抓住它呢? 我本来打算像这样抓住它,但当然只能使用正确的异常:
catch (ServiceException e)
{
throw;
}
响应:
91
<env:Envelope xmlns:env='http://www.w3.org/2003/05/soap-envelope'><env:Header></env:Header><env:Body><env:Fault><env:Code><env:Value>env:Receiver
c
</env:Value>
b
</env:Code>
39
<env:Reason><env:Text xml:lang='de-DE'>Fachlicher Fehler:
b
</env:Text>
d
</env:Reason>
6f
<env:Detail><ns2:ServiceFault xmlns:ns2='xxxxxx'><errorCode>0
c
</errorCode>
3b
<list><MessageEvent><MessageInstanceId>-9223372036854775078
14
</MessageInstanceId>
14
<MessageCode>CRM9005
e
</MessageCode>
2f
<ShortMessage>Aufgabendefinition nicht gefunden
f
</ShortMessage>
43
<DetailMessage>Die Aufgabendefinition (#test) wurde nicht gefunden.
10
</DetailMessage>
13
<SeverityType>Error
f
</SeverityType>
f
</MessageEvent>
7
</list>
1b
<message>Fachlicher Fehler:
a
</message>
13
</ns2:ServiceFault>
d
</env:Detail>
c
</env:Fault>
1a
</env:Body></env:Envelope>
0
我基本上需要DetailMessage,但我不知道如何。
[更新]哦,亲爱的上帝......在这里,我认为这将更加困难。只需要使用FaultException来处理它并获得我想要的任何东西。谢谢@Agalo。请回答你的回复。
答案 0 :(得分:0)
catch (FaultException<ServiceException> e)
{
aufgabe.Error = Exceptionhandler.GetFaultExceptionMessages(e);
aufgabe.IsProcessed = true;
db.Edit(aufgabe);
db.Dispose();
}
public static string GetFaultExceptionMessages(FaultException<ServiceException> e)
{
var msgs = "";
foreach (var error in e.Detail.list)
{
msgs += error.DetailMessage.ToString() + Environment.NewLine;
}
return msgs;
}