我们使用java-web服务将某些类型的数据导入我们的系统。所以他们给了我们一个.wsdl,Visual Studio从中生成了c#代码。
到目前为止一切正常,但是如何处理Web服务定义的异常?
异常类如下所示:
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
我基本上需要详细信息,但我不知道如何操作。
[更新] 哦,亲爱的上帝..在这里我认为这会更加困难。只需要使用FaultException来处理这个问题,并从中得到我想要的任何东西。谢谢@Agalo。请回答您的回复。
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;
}