| 

.NET C# Java Javascript Exception

2
Hallo, ich möchte einen Webservice mit VB einbinden und habe dazu eine URL(WSDL-Datei) bekommen. WSDL.exe erstellt auch automatisch eine Code-Datei (VB). Leider habe ich aber ein Problem mit einer bestimmten Eigenschaft, da diese wohl im XML-dokument als XmlArray (SOAP) deklariert ist und Visual Studio 2010 dies nicht richtig umsetzt.

Was muß ich nun in der generierten Datei ändern, bzw in meinem eigenen Code um diese Eigenschaft richtig zu übermitteln?
Ich hoffe ich bin einigermassen verständlich rübergekommen.

Hier ein Auszug aus der WSDL:
ListOfSMEAdress wird gar nicht generiert!

<xsd:complexType name="ListOfSMEAddress"> <xsd:sequence>
<xsd:element maxOccurs="unbounded" name="smeaddress" type="ismar:SMEAddressData" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SMEAddressData">
<xsd:sequence>
<xsd:element minOccurs="0" default="1" name="SMETON" type="xsd:int" />
<xsd:element minOccurs="0" default="1" name="SMENPI" type="xsd:int" />
<xsd:element name="SMEAddress" type="xsd:string" />
<xsd:element minOccurs="0" name="errorStatus" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SMSData">
<xsd:sequence>
<xsd:element name="binding" type="ismar:BindingData" />
<xsd:element name="smsLength" type="xsd:int" />
<xsd:element name="smsText" type="xsd:string" />
<xsd:element name="sourceAddress" type="xsd:string" />
<xsd:element default="false" name="registeredDeliveryFlag" type="xsd:boolean" />
<xsd:element name="requestType" type="xsd:string" />
<xsd:element default="1" name="numberOfDestinations" type="xsd:int" />
<xsd:element name="destinationAddresses" type="ismar:ListOfSMEAddress" /> <xsd:element default="1" name="destinationFlag" type="xsd:int" />
<xsd:element minOccurs="0" name="scheduleDeliveryTime" type="xsd:dateTime" />
<xsd:element minOccurs="0" name="smsDefaultMessageId" type="xsd:int" />
<xsd:element minOccurs="0" default="5" name="sourceAddressTON" type="xsd:int" />
<xsd:element minOccurs="0" default="0" name="sourceAddressNPI" type="xsd:int" />
<xsd:element minOccurs="0" name="serviceType" type="xsd:string" />
<xsd:element minOccurs="0" name="esmClass" type="xsd:int" />
<xsd:element minOccurs="0" name="protocolId" type="xsd:int" />
<xsd:element minOccurs="0" name="priorityFlag" type="xsd:int" />
<xsd:element minOccurs="0" name="validityPeriod" type="xsd:string" />
<xsd:element minOccurs="0" name="replaceIfPresentFlag" type="xsd:int" />
<xsd:element minOccurs="0" name="dataEncoding" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>"


Dies wird generiert:

<System.Xml.Serialization.XmlIncludeAttribute(GetType(DeliverSMSData)), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http//##########")> _
Partial Public Class SMSData

Private bindingField As BindingData

Private smsLengthField As Integer

Private smsTextField As String

Private sourceAddressField As String

Private registeredDeliveryFlagField As Boolean

Private requestTypeField As String

Private numberOfDestinationsField As Integer

Private destinationAddressesField() As SMEAddressData
Private destinationFlagField As Integer


....

'''<remarks/>
<System.Xml.Serialization.XmlArrayItemAttribute("smeaddress", IsNullable:=False)> _
Public Property destinationAddresses() As SMEAddressData()
Get
Return Me.destinationAddressesField
End Get
Set(value As SMEAddressData())
Me.destinationAddressesField = value
End Set
End Property

.....



Für HIlfe wäre ich sehr Dankbar

MFG Olaf Boss
18.04.2011
olli04 31 2
Ich bin zwar nicht 100% sicher, aber eigentlich sieht es gut aus. Die Eigenschaft "destinationAddresses" ist ein Array von SMEAddressData. ListOfSMEAddressData wird nicht generiert, da es eben ein Array ist.
Oder habe ich was falsch verstanden?
Fredo 18.04.2011
4 Antworten
1
Wie kann ich das im eigenen Code declarieren??

Bsp:
Dim Service As New SMSData
Dim context As New EIMessageContext2
Dim request As New SMSRequestsService
Dim Destadress As New SMEAddressData

Destadress.SMEAddress = "xxxxxxxxxxTelefonnummerxxxxxxx"
Dim pass As New BindingData

context.target = "...Target...."
context.sender = "...der Sender...."
context.correlationId = "...eine ID....."

pass.systemId = "...System ID..."
pass.password = "*********"

Service.sourceAddress = "...Source Adress"
Service.smsText = " Text "
Service.smsLength = "160"
Service.registeredDeliveryFlag = False
Service.requestType = 0
Service.numberOfDestinations = 1
Service.binding = pass
Service.destinationFlag = 0
Service.destinationAddresses = Destadress

...

'hier kommt schon der Fehler (Destadress):
"Der Wert vom Typ "TestApp.WebReference.SMEAddressData" kann nicht in "1-dimensionales Array von TestApp.WebReference.SMEAddressData" konvertiert werden."

Daher muß ich wohl Destinationadresses als Mehrdimensional declarieren ??
18.04.2011
olli04 31 2
0
Eine (von mehreren) Möglichkeiten:
Dim list As List(Of SMEAddressData) = New List(Of SMEAddressData)
list.Add(destAddress)
Service.destinationAddresses = list.ToArray()

Oder
Service.destinationAddresses = New SMEAddressData() {destAddress}

In deinem Beispiel ist "Destadress" vom Typ SMEAddressData und "Service.destinationAddresses" ist ein 1-Dimensional Array. Du musst also keinen mehrdimensionalen Array haben.
18.04.2011
Fredo 495 8
Anmerkung:

Dim list As List(Of SMEAddressData) = New List(Of SMEAddressData)

läßt sich auch kürzer Schreiben

Dim list As New List(Of SMEAddressData)
Floyd 18.04.2011
0
- gelöscht - war als Kommentar gedacht -
18.04.2011
Floyd 11,0k 3 9
Floyd 11,0k 3 9
0
Hallo Fredo,

danke sehr, sieht auf jedenfall besser aus....
Hat mir sehr geholfen!

Gruß Olaf
19.04.2011
olli04 31 2
Gern geschehen. Dann kann du meine Antwort akzeptieren :-) Danke
Fredo 21.04.2011

Stelle deine Vb.webservice.soap.xml-Frage jetzt!