ASMX Service unter Windows 8 Store APP nutzen

Die guten alten ASP.net Web Services sollten eigentlich schon seit .net knapp 10 Jahren durch WCF abgelöst werden. Aber ASMX findet sich auch heute noch, teilweise auch neu implementiert in vielen Software Projekten. Es ist einfach zu programmieren, zu hosten und zu troubleshooten. Selbst SharePoint bietet eine Reihe von Schnittstellen als ASP.NET Web Service an.

Als Basis dient folgender sehr einfacher ASMX Service, der in einem eigene Projekt innerhalb der Windows 8 Store APP Visual Studio 2012 Solution angelegt wird (vormals METRO).

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel

System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class WebService1
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function GetKunden() As List(Of kunde)
        Dim l As New List(Of kunde)
        l.Add(New kunde With {.ID = "1", .isMale = True, .FamName = "Mayer", .Vorname = "Klaus"})
        l.Add(New kunde With {.ID = "9", .isMale = False, .FamName = "Becker", .Vorname = "Verona"})
        l.Add(New kunde With {.ID = "13", .isMale = True, .FamName = "Weber", .Vorname = "Gerhard"})
        l.Add(New kunde With {.ID = "31", .isMale = True, .FamName = "Müller", .Vorname = "Thorsten"})
        Return l
    End Function

End Class
Public Class kunde
    Property ID As String
    Property Vorname As String
    Property FamName As String
    Property isMale As Boolean
End Class

Um diesen Service zu nutzen erzeugen die meisten im Visual Studio Projekt per Add Service Reference und URL des Services die Proxy Klassen im Projekt. In einer Winforms Anwendung (nach wie vor) kann man das mehr oder minder direkt über den Zusatzdialog “Advanced” tun.

image

Diese Option fehlt bei Windows 8 Apps, schlicht weil es dort kein .net 2.0 mehr gibt.

Auf den ersten Blick ist das auch nicht nötig, weil man das auch direkt ganz gut hinbekommt.

image

Allerdings muss im Gegensatz zu Windows Forms in der WinRT, die Kommunikation Asynchron abgehandelt werden. Das erzeugt ganz neue Problemstellungen für den .NET Code bzw. der VB.NET Source kann nicht direkt wieder verwendet werden.

 Dim svc As New ServiceReference1.WebService1SoapClient
    Private Async Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        Dim resp = Await svc.GetKundenAsync()
        liste1.ItemsSource = resp.Body.GetKundenResult
 End Sub

Der nötige XAML Code mit einem Listeview Steuerelement in der Page

<ListView x:Name="liste1">
    <ListView.ItemTemplate>
       <DataTemplate>
          <StackPanel Orientation="Horizontal">
              <TextBlock Text="{Binding VorName}"  Padding="0,0,5,0"/>
              <TextBlock Text="{Binding FamName}" FontWeight="Bold" />
          </StackPanel>
        </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

Letztendlich die Ausgabe der Windows 8 APP

image

Noch ein Paar Hintergrund Infos. Da Windows 8 .NET 4.5 verwendet, kommen eigentlich WCF Proxys zum Einsatz. Microsoft hat allerdings im WCF Bereich ob des konfigurations Desasters auf die App.Config verzichtet. Statt “Contract First” lautet nun die Devise Konvention über Konfiguration.

Also wo findet man nun die nötigen Parameter. Im Code- der reference.vb.

image

Den kann man natürlich ändern, muss aber in Kauf nehmen, das wenn die Service Reference aktualisiert wird, die Änderungen weg sind.

Kommentare sind geschlossen