Op dit moment loop ik tegen een probleem aan met het gebruik van WCF en de automatische generatie van een Wsdl en een singleWsdl.
Ik heb een behavior aangemaakt die een header toe kan voegen aan een WCF service.
Deze behavior implementeert de interface IWsdlExportExtension en daarin de methode ExportEndpoint.
Deze methode laadt de xsd van de header in en voegt deze toe aan de wsdl. (Voorbeeldproject met het probleem is hier te vinden: https://drive.google.com/...3S25rc2c/view?usp=sharing Het toevoegen van de xsd aan de wsdl zit in de class IncomingWsdlExport)
De xsd die wordt toegevoegd:
Resultaat:
De gegenereerde wsdl krijgt netjes de header in de wsdl
Snippet uit de wsdl:
Dit stuk ontbreekt echter in de singleWsdl.
SoapUI genereert het volgende request voor de Wsdl:
en dit request voor de singleWSDL:
Zoals te zien is missen in de singleWSDL de velden HeaderVersion en MessageId in de header.
Ik kan niet verklaren waarom de singleWSDL niet goed wordt gegenereerd, ik heb op internet ook niets kunnen vinden om specifiek de singleWsdl aan te passen. Is er hier iemand die dit kan verklaren?
Ik heb een behavior aangemaakt die een header toe kan voegen aan een WCF service.
Deze behavior implementeert de interface IWsdlExportExtension en daarin de methode ExportEndpoint.
Deze methode laadt de xsd van de header in en voegt deze toe aan de wsdl. (Voorbeeldproject met het probleem is hier te vinden: https://drive.google.com/...3S25rc2c/view?usp=sharing Het toevoegen van de xsd aan de wsdl zit in de class IncomingWsdlExport)
De xsd die wordt toegevoegd:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.randomsite.nl/Header" xmlns:rgh="http://www.randomsite.nl/Header"> <xsd:element name="Header"> <xsd:complexType> <xsd:sequence> <xsd:element ref="rgh:HeaderVersion"/> <xsd:element ref="rgh:MessageId"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="HeaderVersion"> <xsd:annotation> <xsd:documentation>Version of the header </xsd:documentation> </xsd:annotation> <xsd:simpleType> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:element> <xsd:element name="MessageId"> <xsd:annotation> <xsd:documentation>Id of the message </xsd:documentation> </xsd:annotation> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="30"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema> |
Resultaat:
De gegenereerde wsdl krijgt netjes de header in de wsdl
Snippet uit de wsdl:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| <xsd:schema targetNamespace="http://www.randomsite.nl/Header"> <xsd:element name="Header"> <xsd:complexType> <xsd:sequence> <xsd:element ref="rgh:HeaderVersion"/> <xsd:element ref="rgh:MessageId"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="HeaderVersion"> <xsd:annotation> <xsd:documentation>Version of the header</xsd:documentation> </xsd:annotation> <xsd:simpleType> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:element> <xsd:element name="MessageId"> <xsd:annotation> <xsd:documentation>Id of the message</xsd:documentation> </xsd:annotation> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="30"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema> |
Dit stuk ontbreekt echter in de singleWsdl.
SoapUI genereert het volgende request voor de Wsdl:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:head="http://www.randomsite.nl/Header" xmlns:ser="http://www.asite.com/Service1/"> <soapenv:Header> <head:Header> <head:HeaderVersion>?</head:HeaderVersion> <head:MessageId>?</head:MessageId> </head:Header> </soapenv:Header> <soapenv:Body> <ser:GetData> <!--Optional:--> <ser:value>?</ser:value> </ser:GetData> </soapenv:Body> </soapenv:Envelope> |
en dit request voor de singleWSDL:
XML:
1
2
3
4
5
6
7
8
9
10
11
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:head="http://www.randomsite.nl/Header" xmlns:ser="http://www.asite.com/Service1/"> <soapenv:Header> <head:Header/> </soapenv:Header> <soapenv:Body> <ser:GetData> <!--Optional:--> <ser:value>?</ser:value> </ser:GetData> </soapenv:Body> </soapenv:Envelope> |
Zoals te zien is missen in de singleWSDL de velden HeaderVersion en MessageId in de header.
Ik kan niet verklaren waarom de singleWSDL niet goed wordt gegenereerd, ik heb op internet ook niets kunnen vinden om specifiek de singleWsdl aan te passen. Is er hier iemand die dit kan verklaren?
