Announcement

Collapse
No announcement yet.

ArrayofString Parameter für den Webservice

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ArrayofString Parameter für den Webservice

    Hallo,
    ich habe einen Webservice erstellt der eine Onlinebestellung aufnehmen und verarbeiten soll.
    Diesem Webservice würde ich gern ein Array mit den wichtigsten Daten der Bestellung mitgeben.
    zB:
    ArtikelNr,Menge,Preis

    Also hab ich ein Array als übergabeparameter gewählt.
    Versuche ich jetzt mit einem Testprogramm auf diesen Webservice zuzugreifen und ihm genau dieses Array zu senden, bekomme ich immer den Fehler das das mein Array nicht vom Typ ArrayofString währe.
    Jetzt habe ich viel darüber gesucht und auch gefunden nur leider keine endgültig funktionierende Lösung.
    Wie bekomme ich diesen Typ, bzw was kann ich anders machen?

  • #2
    ArtikelNr,Menge,Preis
    Hört sich für mich nach den Properties einer Klasse an. Wo kommt da ein Array ins Spiel?

    Abgesehen davon hast du ja vermutlich eine beim Erzeugen der WebReference erstellte Proxy Klasse (bzw. Proxy Klassen). Hast du dir die mal genau angesehen und die dort erstellten Typen verwendet?

    Comment


    • #3
      sorry, versteh deine Antwort nicht so ganz, aber was ich gemacht habe kann ich dir genau zeigen:
      Webservice seite
      Code:
       <WebMethod()> _
          Public Function doBestellen(ByVal aList As List(Of String), sAuth As String) As String
              Try
                  Return "geht " & alist(1)
              Catch ex As Exception
                  Return ex.Message
              End Try
      
      
          End Function
      testprogramm
      Code:
          Dim x As New ServiceReference1.PlusFaktWebServiceSoapClient
              Dim a As New List(Of String)
              a.Add("1")
              a.Add("2")
              a.Add("3")
              a.Add("4")
              a.Add("5")
      
              MsgBox(x.doBestellen(a, "dGVzdDp0ZXN0"))
      Da habe ich es mit list probiert, habe es aber auch schon mit normalen array probiert "dim a() as string"
      Also garnicht mal mehrdimensional immer kommt diese Fehlermeldung. Natürlich mit dem verwendetetn Typ im ersten teil:
      Das Objekt des Typs "System.Collections.Generic.List`1[System.String]" kann nicht in Typ "WindowsApplication1.ServiceReference1.ArrayOfStri ng" umgewandelt werden.

      Comment


      • #4
        In ServiceReference1 liegen die besagten Proxyklassen. Die liegen als Sourcecode in deinem Projekt rum einfach. Einfach mal im Solutionexplorer drauf klicken und ansehen dann wirst du eher verstehen was da falsch läuft.

        Wenn du auf dem Server im Interface des Webservices List(Of T) benutzt hast so kommen die nicht automatisch als solches auf dem Client an. Im Soap Protokoll (das nichts von .Net und seinen Typen weiß) werden die als ArrayOfString Element übertragen und durch die auf dem Client generierten Proxyklassen wieder in einen .Net Typen umgewandelt. Der Typ muss aber nicht zwingend dem Typ entsprechen mit dem es auf dem Server los ging.

        Beim anlegen einer Webreference wirst du im entsprechenden Dialog gefragt welcher Typ den für Listen auf dem Client verwendet werden soll. Man kann sich da auch wünschen das man generische Listen bekommt. Im Moment ist es aber offensichtlich so das du eine ArrayOfString Klasse generiert bekommen hast die du dann an dieser Stelle auch verwenden musst und eben keine List(of T).

        Comment


        • #5
          mit solution explorer meinst du doch den Objektkatalog in VS2010?
          da sehe ich die klasse arrayof string. ja
          allerdings sagt mir das alles leider noch nicht viel

          das das Soap Protokoll da was anders draus macht hab ich verstanden, wie ich meinem Projekt jetzt sagen kann das ich mir einen anderen Typ wünsche verstehe ich irgendwie auch nicht.. projekteinstellungen?

          Aber was ich verstanden hab ist, ich muss es irgendwie schaffen einen Typ zu generieren der ArrayofString ist oder ?

          Allerdings weiß ich garnicht wie ich das machen soll und wenn ich das schon nicht hinbekomme, wie soll ich das dann externen Firmen erklären die später auf meinen Webservice zugreifen wollen ;-)

          Comment


          • #6
            Solution explorer = Objektmappen-Explorer

            Wenn du im Solution Explorer mal alle Dateien einblendest(dafür gibt oberhalb im Solution Explorer einen Button) solltest du dir den Sourcecode der generierten Klassen ansehen können. Also auch die ArrayOfString Klasse. Dann sollte auch klar sein wie die zu verwenden ist.

            projekteinstellungen?
            Nein im Wizard für die Webreference. Wirf die Webreference (ServiceReference1) nochmal weg und erstell die neu. In dem Dialog sollte es eine Auswahlmöglichkeit geben was für ein Typ auf dem Client verwendet werden soll.

            Aber was ich verstanden hab ist, ich muss es irgendwie schaffen einen Typ zu generieren der ArrayofString ist oder ?
            Daneben Diese Klasse wurde schon generiert und gehört auch schon zu deinem Projekt. Du musst die nur verwenden.

            Allerdings weiß ich garnicht wie ich das machen soll und wenn ich das schon nicht hinbekomme, wie soll ich das dann externen Firmen erklären die später auf meinen Webservice zugreifen wollen ;-)
            Die bekommen einfach die Wsdl bzw die Url auf den Service/Wsdl. Wie man das dann konkret in einem Client verwendet ist ein technisches Problem der verwendeten Clientsprache(also erstmal nicht wirklich deins).

            Comment


            • #7
              es war mal wieder so einfach :-)
              danke für das vom Schlauch runter schupsen

              Dim a As New ServiceReference1.ArrayOfString
              und fertig

              Comment


              • #8
                mhhh dieses Arrayofstring bekomm ich nicht irgendwie mehrdimensional?

                Comment


                • #9
                  mhhh dieses Arrayofstring bekomm ich nicht irgendwie mehrdimensional?
                  Dann wäre es ja dann z.b ArrayOfStringOfString
                  Aber im ernst. Wenn du auf dem Server ein Mehrdimensionales Array in deine Schnittstelle packst und dir dazu eine Webreferenz generieren lässt sollte auch was entsprechendes auf dem Client generiert werden und nicht einfach eine ArrayOfString. Bzw wenn mehrdimensionale Array nicht unterstützt werden(keine Ahnung ob das zulässig ist) sollte es zumindest knallen.

                  Comment


                  • #10
                    Das wäre dann diese Sache?
                    Nein im Wizard für die Webreference. Wirf die Webreference (ServiceReference1) nochmal weg und erstell die neu. In dem Dialog sollte es eine Auswahlmöglichkeit geben was für ein Typ auf dem Client verwendet werden soll.
                    Aber wie das umstellen da in den dienstverweiseinstellungen funktioniert :-( blicke ich auch mal wieder nicht
                    auflistungstyp : system.array in der auswahlbox klingt für mich irgendwie richtig.

                    Comment

                    Working...
                    X