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

时间:2016-01-26 06:39:30

标签: java c# web-services

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

1 个答案:

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