GOV/Webservice/NET: Unterschied zwischen den Versionen

aus GenWiki, dem genealogischen Lexikon zum Mitmachen.
< GOV‎ • Webservice
Zur Navigation springen Zur Suche springen
(→‎Position ausgeben: Implementierung CSharp)
K (typo)
 
(15 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Hinzufügen des Webservices ==
== Einfacher WebService Zugriff (nur ein WebService) ==


=== Visual Studio 2008 (en) ===
=== Hinzufügen des Webservices ===
 
==== Visual Studio 2008 (en) ====
Um den Webservice zum Projekt hinzuzufügen bitte folgende Schritte durchführen:
Um den Webservice zum Projekt hinzuzufügen bitte folgende Schritte durchführen:


# Rechtsclick auf das Projekt im Solution-Explorer.
# Rechtsklick auf das Projekt im Solution-Explorer.
# "Add Web Reference ..." auswählen. Wenn diese Option nicht verfügbar ist bitte mit "Add Service Reference ..." auswählen und im anschließenden Dialog ("Add Service Reference") auf den "Advanced ..." Buttton drücken und im nächsten Dialog ("Server Reference Settings") den "Add Web Reference ..." Button drücken. Dies ist für ein Projekt nur einmal notwendig, dannach ist die Option "Add Web Reference ..." verfügbar.
# "Add Web Reference ..." auswählen. Wenn diese Option nicht verfügbar, ist bitte mit "Add Service Reference ..." auswählen und im anschließenden Dialog ("Add Service Reference") auf den "Advanced ..." Buttton drücken und im nächsten Dialog ("Server Reference Settings") den "Add Web Reference ..." Button drücken. Dies ist für ein Projekt nur einmal notwendig, dannach ist die Option "Add Web Reference ..." verfügbar.
# Im Dialog "Add Web Reference":
# Im Dialog "Add Web Reference":
#* Bei "URL" die URL des Services eintragen, z.B. http://gov.genealogy.net/services/ComplexService?wsdl.  
#* Bei "URL" die URL des Services eintragen, z.B. http://gov.genealogy.net/services/ComplexService?wsdl.  
#* Wenn gewünscht kann noch der Wert für "Web reference name" angepasst werden - dies ist der name des Namespaces in dem die Client-Klassen erzeugt werden. Dem hier eingegebenen Wert wird dann immer noch der Default-Namespace des Projektes vorangestellt (Defaultnamespace.WertWebReferenceName).  
#* Wenn gewünscht, kann noch der Wert für "Web reference name" angepasst werden - dies ist der name des Namespaces in dem die Client-Klassen erzeugt werden. Dem hier eingegebenen Wert wird dann immer noch der Default-Namespace des Projektes vorangestellt (Defaultnamespace.WertWebReferenceName).  
#* Anschließend den "Add Reference" Button klicken.
#* Anschließend den "Add Reference" Button klicken.


Nach dieser Prozedur ist der Webservice nun verfügbar und kann unter dem Gewählten Namespace (z.b. für DefaultNamespace = GovTest, GovTest.net.genealogy.gov) angesprochen werden.
Nach dieser Prozedur ist der Webservice nun verfügbar und kann unter dem gewählten Namespace (z.b. für DefaultNamespace = GovTest, GovTest.net.genealogy.gov) angesprochen werden.
 
=== Position ausgeben und in XML-Datei schreiben ===
 
{|
|Projekt Default-Namespace: ||GovWsTest
|-
|Web Reference Name: ||net.generalogy.gov
|}
 
<source lang="csharp">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using GovWsTest.net.genealogy.gov;
 
namespace GovWsTest
{
    class Program
    {
        static void Main(string[] args) {
            var service = new ComplexServiceImpl();
     
            var place = service.getObject("NEUERGJN59TM");
     
            var name = place.name[0].value;
            var latitude = place.position.lat;
            var longitude = place.position.lon;
     
            Console.WriteLine("{0} liegt bei {1}, {2}.", name, latitude, longitude);
 
            XmlSerializer serealizer = new XmlSerializer(place.GetType());
            string XMLfilename = @"C:\temp\NEUERGJN59TM.xml";
            XmlWriter writer = XmlWriter.Create(XMLfilename);
            serealizer.Serialize(writer, place);
            writer.Close();
 
        }
    }
}
</source>


== Position ausgeben ==
=== GOV-Kennung prüfen ===


{|
{|
Zeile 27: Zeile 73:
using System.Text;
using System.Text;
using GovWsTest.net.genealogy.gov;
using GovWsTest.net.genealogy.gov;
namespace GovWsTest
{
    class Program
    {
        static void Main(string[] args) {
            var service = new ComplexServiceImpl();
     
            var id = "NEUERGJN59TM";
     
            var result = service.checkObjectId(id);
     
            if (result == id) {
                Console.WriteLine("{0} is valid.", id);
            } else if (string.IsNullOrEmpty(result)) {
                Console.WriteLine("{0} is not valid.", id);
            } else {
                Console.WriteLine("{0} has been replaced with {1}", id, result);
            }
        }
    }
}
</source>
== Complexer Zugriff (merhrere Services gleichzeitig) ==
Die automatische Codegenerierung von Visual Studio verlangt einen eigenen Namespace für jede WSDL, welche als Service- oder WebService-Referenz hinzugefügt wird. Als Folge hiervon kann ein Datentyp nicht von einem WebService an einen anderen übergeben werden. Wenn die WSDL des GOV Webservice so angepasst werden können, dass eine WSDL alle Interfaces zurückliefert, kann der Service mit der o.g. Methode angesprochen werden. Da dies aber momentan nicht der Fall ist, habe ich eine Klassen-Bibliothek erstellt, die die automatisch generierten Sourcen für den ComplexWebService und den ChangeWebService zusammenführt und ein übergreifendes Typsystem zur Verfügung stellt.
Diese Bibliothek ist statisch erzeugt, d.h. wenn sich der WebService oder dessen Typen ändern, muss dies manuell nachgezogen werden. Da ich die Wahrscheinlichkeit für eine solche Änderung eher gering einschätze, kann m.E. nach die Bibliothek bis auf weiteres verwendet werden.
=== Lizenz ===
Hiermit übergebe ich die Software der Public Domain. Ich übernehme keine Garantie für ein korrektes Funktioniern und auch keine Haftung für eventuelle Schäden jeglicher Natur.
Die Software wird nicht aktiv unterstützt, Fragen bitte an die [http://list.genealogy.net/mm/listinfo/gov-develop GOV-Mailingliste]. Eine Dokumentation wird nicht zur Verfügung gestellt, bitte schaut in die Sourcen und die Beispiele für den Webservice - die Methoden sind die selben.
=== Verwendung ===
<source lang="csharp">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using GovWebService;


namespace GovWsTest
namespace GovWsTest
Zeile 33: Zeile 124:
{
{
static void Main(string[] args) {
static void Main(string[] args) {
var service = new ComplexServiceImpl();


var place = service.getObject("NEUERGJN59TM");
string userName = "myUserId";    // enter your real username here
string password = "myPassword";  // enter your real password here
 
var testId = "test1234";
 
@object testObj = null;
 
using (var readService = new ComplexServiceImpl()) {
testObj = readService.getObject(testId);
}
if (testObj.position != null) {
Console.WriteLine("{0} liegt bei {1}N, {2}O", testObj.name, testObj.position.lat, testObj.position.lon);
} else {
Console.WriteLine("{0} liegt bei undefined", testObj.name);
}
 
var newPos = new Position() { lat = 48D, lon = 11.35D };
testObj.position = newPos;


var name = place.name[0].value;
using (var writeService = new ChangeServiceImpl()) {
var latitude = place.position.lat;
writeService.saveObject(testObj, userName, password);
var longitude = place.position.lon;
}


Console.WriteLine("{0} liegt bei {1}, {2}.", name, latitude, longitude);
using (var readService = new ComplexServiceImpl()) {
testObj = readService.getObject(testId);
}
if (testObj.position != null) {
Console.WriteLine("{0} liegt bei {1}N, {2}O", testObj.name, testObj.position.lat, testObj.position.lon);
} else {
Console.WriteLine("{0} liegt bei undefined", testObj.name);
}
}
}
}
}
Zeile 47: Zeile 161:
</source>
</source>


== GOV-Kennung prüfen ==
[[Kategorie:GOV-Intern]]

Aktuelle Version vom 17. August 2023, 04:41 Uhr

Einfacher WebService Zugriff (nur ein WebService)

Hinzufügen des Webservices

Visual Studio 2008 (en)

Um den Webservice zum Projekt hinzuzufügen bitte folgende Schritte durchführen:

  1. Rechtsklick auf das Projekt im Solution-Explorer.
  2. "Add Web Reference ..." auswählen. Wenn diese Option nicht verfügbar, ist bitte mit "Add Service Reference ..." auswählen und im anschließenden Dialog ("Add Service Reference") auf den "Advanced ..." Buttton drücken und im nächsten Dialog ("Server Reference Settings") den "Add Web Reference ..." Button drücken. Dies ist für ein Projekt nur einmal notwendig, dannach ist die Option "Add Web Reference ..." verfügbar.
  3. Im Dialog "Add Web Reference":
    • Bei "URL" die URL des Services eintragen, z.B. http://gov.genealogy.net/services/ComplexService?wsdl.
    • Wenn gewünscht, kann noch der Wert für "Web reference name" angepasst werden - dies ist der name des Namespaces in dem die Client-Klassen erzeugt werden. Dem hier eingegebenen Wert wird dann immer noch der Default-Namespace des Projektes vorangestellt (Defaultnamespace.WertWebReferenceName).
    • Anschließend den "Add Reference" Button klicken.

Nach dieser Prozedur ist der Webservice nun verfügbar und kann unter dem gewählten Namespace (z.b. für DefaultNamespace = GovTest, GovTest.net.genealogy.gov) angesprochen werden.

Position ausgeben und in XML-Datei schreiben

Projekt Default-Namespace: GovWsTest
Web Reference Name: net.generalogy.gov
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using GovWsTest.net.genealogy.gov;

namespace GovWsTest
{
    class Program
    {
        static void Main(string[] args) {
            var service = new ComplexServiceImpl();
      
            var place = service.getObject("NEUERGJN59TM");
      
            var name = place.name[0].value;
            var latitude = place.position.lat;
            var longitude = place.position.lon;
      
            Console.WriteLine("{0} liegt bei {1}, {2}.", name, latitude, longitude);

            XmlSerializer serealizer = new XmlSerializer(place.GetType());
            string XMLfilename = @"C:\temp\NEUERGJN59TM.xml";
            XmlWriter writer = XmlWriter.Create(XMLfilename);
            serealizer.Serialize(writer, place);
            writer.Close();

        }
    }
}

GOV-Kennung prüfen

Projekt Default-Namespace: GovWsTest
Web Reference Name: net.generalogy.gov
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GovWsTest.net.genealogy.gov;

namespace GovWsTest
{
    class Program
    {
        static void Main(string[] args) {
            var service = new ComplexServiceImpl();
      
            var id = "NEUERGJN59TM";
      
            var result = service.checkObjectId(id);
      
            if (result == id) {
                Console.WriteLine("{0} is valid.", id);
            } else if (string.IsNullOrEmpty(result)) {
                Console.WriteLine("{0} is not valid.", id);
            } else {
                Console.WriteLine("{0} has been replaced with {1}", id, result);
            }
        }
    }
}

Complexer Zugriff (merhrere Services gleichzeitig)

Die automatische Codegenerierung von Visual Studio verlangt einen eigenen Namespace für jede WSDL, welche als Service- oder WebService-Referenz hinzugefügt wird. Als Folge hiervon kann ein Datentyp nicht von einem WebService an einen anderen übergeben werden. Wenn die WSDL des GOV Webservice so angepasst werden können, dass eine WSDL alle Interfaces zurückliefert, kann der Service mit der o.g. Methode angesprochen werden. Da dies aber momentan nicht der Fall ist, habe ich eine Klassen-Bibliothek erstellt, die die automatisch generierten Sourcen für den ComplexWebService und den ChangeWebService zusammenführt und ein übergreifendes Typsystem zur Verfügung stellt.

Diese Bibliothek ist statisch erzeugt, d.h. wenn sich der WebService oder dessen Typen ändern, muss dies manuell nachgezogen werden. Da ich die Wahrscheinlichkeit für eine solche Änderung eher gering einschätze, kann m.E. nach die Bibliothek bis auf weiteres verwendet werden.

Lizenz

Hiermit übergebe ich die Software der Public Domain. Ich übernehme keine Garantie für ein korrektes Funktioniern und auch keine Haftung für eventuelle Schäden jeglicher Natur.

Die Software wird nicht aktiv unterstützt, Fragen bitte an die GOV-Mailingliste. Eine Dokumentation wird nicht zur Verfügung gestellt, bitte schaut in die Sourcen und die Beispiele für den Webservice - die Methoden sind die selben.

Verwendung

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using GovWebService;

namespace GovWsTest
{
	class Program
	{
		static void Main(string[] args) {

			string userName = "myUserId";     // enter your real username here
			string password = "myPassword";   // enter your real password here

			var testId = "test1234";

			@object testObj = null;

			using (var readService = new ComplexServiceImpl()) {
				testObj = readService.getObject(testId);
			}
			if (testObj.position != null) {
				Console.WriteLine("{0} liegt bei {1}N, {2}O", testObj.name, testObj.position.lat, testObj.position.lon);
			} else {
				Console.WriteLine("{0} liegt bei undefined", testObj.name);
			}

			var newPos = new Position() { lat = 48D, lon = 11.35D };
			testObj.position = newPos;

			using (var writeService = new ChangeServiceImpl()) {
				writeService.saveObject(testObj, userName, password);
			}

			using (var readService = new ComplexServiceImpl()) {
				testObj = readService.getObject(testId);
			}
			if (testObj.position != null) {
				Console.WriteLine("{0} liegt bei {1}N, {2}O", testObj.name, testObj.position.lat, testObj.position.lon);
			} else {
				Console.WriteLine("{0} liegt bei undefined", testObj.name);
			}
		}
	}
}