Laden...

WSDL unvollständig

Erstellt von timt vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.721 Views
T
timt Themenstarter:in
21 Beiträge seit 2006
vor 16 Jahren
WSDL unvollständig

Hallo,

ich habe ein merkwürdiges Problem.

Ich habe einen Webservice der mir ca. 10 Funktionen bereitstellt.
Die Funktionen geben unterschiedliche komplexe Objekte zurück, was super funktioniert, nur bei drei Funktionen die mir ein Benutzerdefiniertes Objekt zurück geben, ist die Beschreibung der komplexen Objekte in der automatisch generierten WSDL Datei unvollständig.
In der Beschreibung der komplexen Objekte fehlen einfach einige Objekte, z.B. strings, guids, und ints.

Ich weiß leider gar nicht wo ich mit der Fehlersuche anfangen soll.
Hat jemand einen Tipp für mich?

Gruß
Tim

S
8.746 Beiträge seit 2005
vor 16 Jahren
  1. Woran merkst du, dass die WSDL unvollständig ist
  2. int, guid, etc. sind keine Objekte, sondern Typen und kommen aus dem XmlSchema-Namespace (üblicherweise mit xs-Prefix), sind also vordefiniert
T
timt Themenstarter:in
21 Beiträge seit 2006
vor 16 Jahren

Wenn ich den Webservice mit webservice.asmx?WSDL aufrufe, sehe ich in der Beschreibung, dass einige Typen in der Beschreibung des komplexen Typs "PaymentStatus" fehlen.

  • <s:element name="CaptureEDD">
  • <s:complexType>
  • <s:sequence>
    <s:element minOccurs="1" maxOccurs="1" name="payID" type="s1:guid" />
    <s:element minOccurs="1" maxOccurs="1" name="transID" type="s:long" />
    <s:element minOccurs="1" maxOccurs="1" name="amount" type="s:int" />
    <s:element minOccurs="0" maxOccurs="1" name="currency" type="s:string" />
    </s:sequence>
    </s:complexType>
    </s:element>
  • <s:element name="CaptureEDDResponse">
  • <s:complexType>
  • <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="CaptureEDDResult" type="tns:PaymentStatus" />
    </s:sequence>
    </s:complexType>
    </s:element>
  • <s:complexType name="PaymentStatus">
  • <s:sequence>
    <s:element minOccurs="1" maxOccurs="1" name="ReqID" type="s1:guid" />
    <s:element minOccurs="1" maxOccurs="1" name="Amount" type="s:int" />
    <s:element minOccurs="0" maxOccurs="1" name="Type" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="RequestDate" type="s:dateTime" />
    </s:sequence>
    </s:complexType>

Tim

S
8.746 Beiträge seit 2005
vor 16 Jahren

Und wie schaut der Code der PaymentStatus-Klasse aus?

T
timt Themenstarter:in
21 Beiträge seit 2006
vor 16 Jahren

Das hier ist meine PaymentStatus Klasse.
Das Objekt wird beim Aufruf der Methode CaptureEDD() erzeugt und zurückgegeben.

    public class PaymentStatus
    {
        protected PaymentStatus() { }

        public PaymentStatus(Guid payID, Guid xID, Guid reqID, Int64 transID, int amount, string status, string description, Int64 code, string type, DateTime requestDate)
        {
            this._PayID = payID;
            this._XID = xID;
            this._ReqID = reqID;
            this._TransID = transID;
            this._Amount = amount;
            this._Status = status;
            this._Description = description;
            this._Code = code;
            this._Type = type;
            this._RequestDate = requestDate;
        }
        private Guid _PayID;
        public Guid PayID
        {
            get { return _PayID; }
        }
        private Guid _XID;
        public Guid XID
        {
            get { return _XID; }
        }
        private Guid _ReqID;
        public Guid ReqID
        {
            get { return _ReqID; }
            set { _ReqID = value; }
        }
        private Int64 _TransID;
        public Int64 TransID
        {
            get { return _TransID; }
        }
        private int _Amount;
        public int Amount
        {
            get { return _Amount; }
            set { _Amount = value; }
        }
        private string _Status;
        public string Status
        {
            get { return _Status; }
        }
        private string _Description;
        public string Description
        {
            get { return _Description; }
        }
        private Int64 _Code;
        public Int64 Code
        {
            get { return _Code; }
        }
        private string _Type;
        public string Type
        {
            get { return _Type; }
            set { _Type = value; }
        }
        private DateTime _RequestDate;
        public DateTime RequestDate
        {
            get { return _RequestDate; }
            set { _RequestDate = value; }
        }
    }

Tim

S
8.746 Beiträge seit 2005
vor 16 Jahren

Auch lustig ist die Tatsache, dass strings scheinbar optional sind.

T
timt Themenstarter:in
21 Beiträge seit 2006
vor 16 Jahren

Habe die Lösung gerade selber gefunden.
Die fehlenden Typen haben keinen Setter in der PaymentStatus.
Warum diese Typen deswegen nicht in der WSDL Datei auftauchen ist mir aber nicht ganz klar.

Vielen Dank trotzdem.

Tim

B
1.529 Beiträge seit 2006
vor 16 Jahren

Auch lustig ist die Tatsache, dass strings scheinbar optional sind.

Was vermutlich daran liegt, dass Strings Referenztypen sind und daher auch den Wert "kein Wert" (null) aufnehmen können.

S
8.746 Beiträge seit 2005
vor 16 Jahren

Anderseits hat XML keinerlei "read-only"-Semantik. Irgendwie konsequent sowas zu ignorieren.