c# 基于 Java-Webservice 的异常处理

本文关键字:异常处理 Java-Webservice 基于 | 更新日期: 2023-09-27 18:31:57

我们使用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。请回答您的回复。

c# 基于 Java-Webservice 的异常处理

    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;
        }