La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di Informatica industriale Creazione e pubblicazione di un web service in Visual Studio 2005 Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli.

Presentazioni simili


Presentazione sul tema: "Corso di Informatica industriale Creazione e pubblicazione di un web service in Visual Studio 2005 Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli."— Transcript della presentazione:

1 Corso di Informatica industriale Creazione e pubblicazione di un web service in Visual Studio 2005 Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

2 I web service Il web service è un sistema software progettato per supportare il concetto di interoperabilità fra diversi host all'interno di una rete L' interfaccia è definita utilizzando WSDL La comunicazione avviene mediante SOAP I messaggi sono trasportati dal protocollo HTTP I messaggi sono formattati in XML

3 L'HTML è un linguaggio creato principalmente per la descrizione e la formattazione di pagine web mentre XML è un metalinguaggio utilizzato per creare nuovi linguaggi, atti a descrivere documenti strutturati. In HTML si hanno un insieme già definito di tag utilizzabili per la creazione delle pagine, mentre in XML è invece possibile definirne di propri a seconda delle esigenze. Mario Rossi Max Verdi XML

4 Creazione di un servizio Web Passo 1: Creazione nuovo progetto in VS 2005 Passo 2: Creazione di un servizio ASP. NET

5 Creazione di un servizio Web Passo 3: Esempio automatico HelloWorld nel file Service.asmx

6 Creazione di un servizio Web Passo 4: Avviare il debug del servizio web Passo 5: Creazione file di configurazione del servizio Web

7 Creazione di un servizio Web Passo 6: Avvio del server di sviluppo integrato ASP.NET Passo 7: Test del servizio Web

8 Creazione di un servizio Web Passo 8: Richiamare un servizio pubblicato dal web service Passo 9: Risultato della chiamata al web service

9 Il file WSDL La descrizione dei servizi esportati dal web service è fatta in WSDL ed inserita in un opportuno file che avrà estensione wsdl. E possibile prendere visione del file aggiungendo la stringa ?WSDL alla fine dell URL del web service. Esempio: Se lURL del web service è: Allora la relativa descrizione dei servizi si otterrà col seguente URL

10 Il file WSDL

11 Pubblicazione del servizio Per pubblicare il servizio Web dopo averlo sviluppato e testato è necessario farlo riconoscere ad IIS. Con la seguente procedura si pubblicherà il servizio Web in modo che non utilizzi più il server di sviluppo ASP.NET bensì IIS. Passo 1: Predisporre una directory sotto C:\Inetpub\wwwroot di nome prova_sito dove andranno posizionati i file necessari per il corretto funzionamento del servizio web. Dopo aver creato la cartella bisogna modificare i permessi sulla cartella appena creata altrimenti il servizio web non potrà funzionare ed ovviamente avviare IIS sull indirizzo localhost.

12 Pubblicazione del servizio

13

14 Per pubblicare il servizio Web dopo averlo sviluppato e testato è necessario farlo riconoscere ad IIS. Con la seguente procedura si pubblicherà il servizio Web in modo che non utilizzi più il server di sviluppo ASP.NET bensì IIS. Passo 2: Utilizzare la procedura guidata

15 Pubblicazione del servizio Passo 3: Configurare il servizio web Passo 4: Testare il servizio web

16 Pubblicazione del servizio Problemi di funzionamento: Se si riscontrano problemi di funzionamento dovuto ad errori sul file di configurazione (.config) molto probabilmente non si sta utilizzando la versione corretta del framework.NET. E necessario quindi selezionare quella corretta col seguente comando lanciato dal prompt: C:\Windows\Microsoft.NET\Framework\v \aspnet_regiis.exe –i E dopo riavviare Internet Information Service col comando iisreset

17 Creazione di un client Passo 1: Creazione di un nuovo progetto in Visual Studio 2005

18 Creazione di un client Passo 2: Creazione di una console application

19 Creazione di un client Passo 3: E necessario aggiungere un riferimento Web nel progetto per permettere al client di dialogare col servizio web precedentemente creato.

20 Creazione di un client Passo 4: Cercare il servizio fra i servizi locali

21 Creazione di un client Passo 5: Selezionare il servizio desiderato

22 Creazione di un client Passo 6: aggiungere il riferimento al progetto rinominandolo come Servizio. Se dovessero esserci problemi controllare lindirizzo del server

23 Creazione di un client Il riferimento appena inserito dovrà apparire fra i file coinvolti nel progetto.

24 Creazione di un client Passo 7: Creazione di un oggetto che rappresenta il servizio web. A questo punto è possibile invocare tutti i metodi del servizio web come se fossero locali.

25 La parola chiave out in C# In C# con la parola chiave out gli argomenti saranno passati per riferimento. Funzionalità simile offre la parola chiave ref, solo che se si sceglie di utilizzare ref la variabile passata alla funzione deve essere prima inizializzata. Per utilizzare un parametro out, è necessario che la definizione del metodo e il metodo chiamante utilizzino in modo esplicito la parola chiave out.

26 Esempio

27

28 Corso di Informatica industriale Funzioni e strutture dati in OPC XML-DA Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

29 OPC XML DA Per lo scambio dati fra client e server sono previste determinate strutture dati che servono ad inglobare al loro interno le varie informazioni da inviare al web service e di conseguenza le informazioni di risposta che il web service invia al client.

30 Esempio di scambio dati (GetStatus) Server OPC XML-DAClient OPC XML-DA GetStatus (string LocaleID, string ClientRequestHandle, out ServerStatus Status) GetStatusResponse (ReplyBase Response, ServerStatus Status) string statusInfoField; string vendorInfoField; string[] supportedLocaleIDsField; interfaceVersion[] supportedInterfaceVersionsField; DateTime startTimeField; string productVersionField DateTime rcvTimeField; DateTime replyTimeField; string clientRequestHandleField; string revisedLocaleIDField; serverState serverStateField;

31 Esempio di scambio dati (Read) Server OPC XML-DAClient OPC XML-DA Read (RequestOptions Options, ReadRequestItemList ItemList, out ReplyItemList RItemList, out OPCError[] Errors) ReadResponse (ReplyBase ReadResult, ReplyItemList RItemList, OPCError[] Errors) string ItemPath QName ReqType int MaxAge ReadRequestItem[] Items boolean ReturnErrorText boolean ReturnDiagnosticInfo boolean ReturnItemTime boolean ReturnItempath …

32 Esempio di scambio dati (Write) Server OPC XML-DAClient OPC XML-DA ItemValue[] Items boolean ReturnErrorText boolean ReturnDiagnosticInfo boolean ReturnItemTime boolean ReturnItempath … Write (RequestOptions Options, WriteRequestItemList ItemList, bool ReturnValuesOnReply, out ReplyItemList RItemList, out OPCError[] Errors) WriteResponse (ReplyBase WriteResult, ReplyItemList RItemList, OPCError[] Errors)

33 Esempio di scambio dati (Subscribe) Server OPC XML-DAClient OPC XML-DA SubscribeRequestItem[] Items Subscribe (RequestOptions Options, SubscribeRequestItemList ItemList, bool ReturnValuesOnReply, int SubscriptionPingRate, out SubscribeReplyItemList RItemList, out OPCError[] Errors, out string ServerSubHandle) SubscribeResponse (ReplyBase SubscribeResult, SubscribeReplyItemList RItemList, OPCError[] Errors, string ServerSubHandle )

34 Esempio di scambio dati (Subscription Polled Refresh) Server OPC XML-DAClient OPC XML-DA SubscriptionPolledRefresh (RequestOptions Options, string[] ServerSubHandles, System.DateTime HoldTime, bool HoldTimeSpecified, int WaitTime, bool ReturnAllItems, out string[] InvalidServerSubHandles, out SubscribePolledRefreshReplyItemList[] RItemList, out OPCError[] Errors, out bool DataBufferOverflow) SubscriptionPolledRefreshResponse (ReplyBase SubscriptionPolledRefresh Result, string[] InvalidServerSubHandles, SubscribePolledRefreshReplyItemList[] RItemList, OPCError[] Errors, bool DataBufferOverflow)

35 Esempio di scambio dati (Subscription Cancel) Server OPC XML-DAClient OPC XML-DA SubscriptionCancel (string ServerSubHandle, ref string ClientRequestHandle) SubscriptionCancel Response ( string ClientRequestHandle )

36 Esempio di scambio dati (Browse) Server OPC XML-DAClient OPC XML-DA Enumeration {all, branch, item} Browse (System.Xml.XmlQualifiedName[] PropertyNames, string LocaleID, string ClientRequestHandle, string ItemPath, string ItemName, ref string ContinuationPoint, int MaxElementsReturned, browseFilter BrowseFilter, string ElementNameFilter, string VendorFilter, bool ReturnAllProperties, bool ReturnPropertyValues, bool ReturnErrorText, out BrowseElement[] Elements, out OPCError[] Errors, out bool MoreElements) BrowseResponse (ReplyBase BrowseResult, BrowseElement[] Elements, OPCError[] Errors, bool MoreElements ) string ItemPath string ItemName bool IsItem bool HasChildren ItemProperty[] Properties

37 Esempio di scambio dati (Get Properties) Server OPC XML-DAClient OPC XML-DA ItemProperty[] Properties string Description string ItemPath string ItemName … GetProperties ( ItemIdentifier[] ItemIDs, System.Xml.XmlQualifiedName[] PropertyNames, string LocaleID, string ClientRequestHandle, string ItemPath, bool ReturnAllProperties, bool ReturnPropertyValues, bool ReturnErrorText, out PropertyReplyList[] PropertyLists, out OPCError[] Errors) GetProperties Response (ReplyBase GetProperties Result, PropertyReplyList[] PropertyLists, OPCError[] Errors)

38 WSDL per GetStatus

39 Corso di Informatica industriale Il file WSDL ufficiale di OPC XML-DA Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

40 Compilatore WSDL Per compilare il file WSDL ufficiale di OPC foundation è necessario un tool presente in Visual Studio Il tool in questione è il compilatore WSDL invocabile col comando wsdl. Il comando WSDL è visibile, per impostazione predefinita, soltanto dal prompt dei comandi di Visual Studio.

41 Compilatore WSDL Basta lanciare il comando wsdl senza parametri per ottenere l elenco delle opzioni disponibili. La forma generale di utilizzo del compilatore è la seguente: In cui: : rappresenta linsieme di opzioni di compilazione : indica il percorso del file WSDL da compilare

42 Compilatore WSDL Le opzioni più importanti, che saranno usate in seguito, sono: /language: opzione che serve a specificare in che linguaggio creare la classe (default: c#) /namespace: opzione che serve a definire lo spazio dei nomi /out: opzione che serve a definire un nome per il file di output generato alla fine della compilazione (il nome della classe è Service)

43 Creazione OPC Client WSDL fileCompilatore WSDLClasse proxy client Passo 1: Creazione classe proxy del client che conterrà tutti i metodi, strutture dati e tutto il necessario per una buona programmazione e un buon funzionamento del client OPC Il comando da lanciare per ottenere la classe proxy client in C# (di nome Service) e memorizzarla nel file ClientProxy.cs è il seguente: wsdl /language:cs /out:ClientProxy.cs OPC.wsdl

44 Creazione OPC Client Quello che si ottiene è una classe definita cosi: public partial class Service : System.Web.Services.Protocols.SoapHttpClientProtocol { //codice del client } La parola chiave partial in C# consente di definire classi, metodi e strutture dati in generale allinterno di diversi file che verranno unificati in fase di compilazione.

45 Creazione OPC Client Passo 2: Creare una console application in Visual Studio 2005 per poter costruire il client OPC

46 Creazione OPC Client Passo 3: Aggiungere i riferimenti a System.Web e System.Web.Services Passo 4: Aggiungere al progetto il file ClientProxy.cs

47 Creazione OPC Client Passo 5 (opzionale): Includere la classe ProxyClient al namespace del progetto namespace ConsoleApplication { //ProxyClient code } In questo modo la classe ProxyClient farà parte dello stesso spazio dei nomi del programma principale (main) che rappresenta il client OPC

48 Creazione OPC Client Passo 6: Sviluppare il client OPC. Prima cosa da fare instanziare un oggetto che rappresenta il server OPC con il quale dialogare definendo l URL al quale si trova.

49 Creazione OPC Client (GetStatus) Passo 7: Sviluppare i vari metodi del client OPC.

50 Stampa dei risultati (GetStatus)

51 Creazione OPC Client (Read) La Read che utilizzeremo più avanti ha la seguente firma: Prima è necessario definire le strutture dati necessarie:

52 Creazione OPC Client (Read)

53

54 Stampa dei risultati (Read) Chiamata al metodo e stampa dei risultati

55 Stampa dei risultati (Read) Chiamata al metodo e stampa dei risultati

56 Creazione OPC Client (Write) La Write che utilizzeremo più avanti ha la seguente firma: Prima è necessario definire le strutture dati necessarie non definite prima:

57 Creazione OPC Client (Write)

58 Stampa dei risultati (Write) Chiamata al metodo e stampa dei risultati

59 Stampa dei risultati (Write)

60 Creazione OPC Client (Subscribe) La Subscribe che utilizzeremo più avanti ha la seguente firma: Prima è necessario definire le strutture dati necessarie non definite prima:

61 Stampa dei risultati (Subscribe) Stampa dei risultati

62 Creazione OPC Client (SubscriptionPolledRefresh) La SubscriptionPolledRefresh che utilizzeremo più avanti ha la seguente firma: Prima è necessario definire le strutture dati necessarie non definite prima:

63 Stampa dei risultati (SubscriptionPolledRefresh) Stampa dei risultati

64 Creazione OPC Client (SubscriptionCancel) La SubscriptionCancel che utilizzeremo più avanti ha la seguente firma:

65 Creazione OPC Client (Browse) La Browse che utilizzeremo più avanti ha la seguente firma: Prima è necessario definire le strutture dati necessarie non definite prima:

66 Stampa dei risultati (Browse) Stampa dei risultati

67 Creazione OPC Client (GetProperties) La GetProperties che utilizzeremo più avanti ha la seguente firma: Prima è necessario definire le strutture dati necessarie non definite prima:

68 Stampa dei risultati (GetProperties) Stampa dei risultati

69 Corso di Informatica industriale A.A Connessione ad un server OPC XML Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

70 Parametri connessione Supponiamo che l IP del server sia Attivare lopzione Ottieni automaticamente un indirizzo IP, in modo da ottenere un indirizzo in modo automatico. Se si vuole impostare tutto manualmente è sufficiente inserire un indirizzo del tipo x dove x 9

71 Parametri connessione Nel codice del client sostituire lURL del server con il nuovo URL: Invocare i metodi sul server e controllarne le risposte (come visto in precedenza)

72 Corso di Informatica industriale Creazione di un server OPC XML-DA Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

73 Compilatore WSDL Per compilare il file WSDL ufficiale di OPC foundation per la classe lato server si utilizza lo stesso tool utilizzato per creare la classe proxy del client. Il tool in questione è il compilatore wsdl al quale si associano gli opportuni parametri.

74 Compilatore WSDL Basta lanciare il comando wsdl senza parametri per ottenere l elenco delle opzioni disponibili. La forma generale di utilizzo del compilatore è la seguente: In cui: : rappresenta linsieme di opzioni di compilazione : indica il percorso del file WSDL da compilare

75 Compilatore WSDL Le opzioni più importanti e che saranno usate in seguito sono: /language: opzione che serve a specificare in che linguaggio creare la classe astratta (default: c#) /namespace: opzione che serve a definire lo spazio dei nomi /out: opzione che serve a definire un nome per il file di output generato alla fine della compilazione (il nome della classe è Service) /server opzione che serve a generare la classe astratta per il server OPC (se lopzione è omessa il tool genera la classe proxy per il client)

76 Creazione OPC Server WSDL fileCompilatore WSDLClasse proxy server Passo 1: Creazione classe proxy del server che conterrà tutti i metodi, strutture dati e tutto il necessario per una buona programmazione e un buon funzionamento del server OPC Il comando da lanciare per ottenere la classe proxy client in C# (di nome Service) e memorizzarla nel file ProxyServer.cs è il seguente: wsdl /language:cs /out:ProxyServer.cs /server OPC.wsdl

77 Creazione OPC Server Quello che si ottiene è una classe definita cosi: public abstract partial class Service : System.Web.Services.WebService { //codice del server proxy } Utilizzare il modificatore abstract in una dichiarazione di classe significa che una classe può essere utilizzata soltanto come classe base di altre classi. I membri contrassegnati come astratti o inclusi in una classe astratta devono essere implementati da classi che derivano dalla classe astratta.

78 Creazione OPC Server Passo 2: Creare un nuovo progetto in Visual Studio Il progetto deve essere di tipo Web ed in particolare dovrà essere un servizio Web ASP.NET

79 Creazione OPC Server Passo 3: Aggiungere il file ProxyServer.cs al progetto appena creato.

80 Creazione OPC Server Passo 4: Da Visual Studio trascinare il file ProxyServer.cs allinterno della cartella APP_CODE del progetto.

81 Creazione OPC Server Rinominare il file Service.cs in ServerOPC.cs per evitare confusione con la classe Service presente all interno del file ProxyServer.cs che rappresenta invece la classe astratta del servizio web

82 Creazione OPC Server Rinominare il file Service.asmx in ServerOPC.asmx e modificarne il contenuto

83 Creazione OPC Server I file principali del progetto sono: ProxyServer.cs : classe proxy del server. ServerOPC.asmx : classe principale del servizio Web (e quindi del server OPC). Il suo codice è racchiuso in ServerOPC.cs Per contattare il server (dopo la pubblicazione) si utilizzerà il seguente link:

84 Creazione OPC Server Passo 5: Fare in modo che la classe ServerOPC (definita in ServerOPC.cs) estenda la classe Service definita allinterno del file ProxyServer.cs e non System.Web.Services.Webservice public class ServerOPC : Service { //OPC Server code } In questo modo la classe Server estenderà la classe astratta Service contenuta in ProxyServer.cs

85 Creazione OPC Server Dal punto di vista concettuale è stata appena creata la seguente architettura: WSDL OPC Classe proxy del server OPC (di nome Service ed estende System.Web.Services.WebService) Classe del server OPC (di nome ServerOPC ed estende la classe Service) Compilazione Client OPC Connessione

86 Creazione OPC Server Passo 6: Sviluppare il server OPC implementando tutti i metodi che ci impone la classe astratta Service (altrimenti non compila).

87 Creazione OPC Server Quando si implementa un metodo che era definito come abstract in c# bisogna anteporre la parola chiave override

88 Creazione OPC Server Implementare i metodi non basta, soprattutto se nei parametri della funzione sono presenti parametri out. Esempio con GetStatus: In tal caso basta sviluppare la funzione in modo che ritorni i parametri richiesti, anche se vuoti: public override ReplyBase GetStatus(…) { Status = null; ReplyBase Response = new ReplyBase(); return Response; }

89 Creazione OPC Server Se non si mettesse la linea: Status = null; il compilatore darebbe errore: perché tutti i parametri out devono essere assegnati prima che la chiamata a funzione termini

90 Creazione OPC Server Passo 7: Impostare come pagina iniziale del progetto il file contenente il server OPC

91 Creazione OPC Server Passo 8: Avviare e testare il server OPC Potrebbe essere necessario aggiungere un nuovo file Web.config (come visto in precedenza)

92 Creazione OPC Server Avviando il server appare linterfaccia con i metodi esportati dal server:

93 Pubblicazione del server OPC A questo punto il nostro servizio web ha bisogno solo di essere pubblicato, predisponendo una cartella dal nome ProvaServerOPC (utilizzando la procedura vista in precedenza). Dopo la pubblicazione del servizio, il server OPC sarà disponibile all indirizzo:

94 Esempio GetStatus lato server public override ReplyBase GetStatus(string LocaleID, ClientRequestHandle, out ServerStatus status) { ReplyBase Response = new ReplyBase(); Response.RcvTime = System.DateTime.Now; Response.ServerState = serverState.running; Response.ClientRequestHandle = "Client Handle modificato dal server"; Response.RevisedLocaleID = "IT"; Status = new ServerStatus(); Status.ProductVersion = "Product version"; Status.StartTime = new DateTime(2008, 06, 04, 11, 0, 0); Status.StatusInfo = "Status info"; Status.SupportedInterfaceVersions = new interfaceVersion[1]; Status.SupportedInterfaceVersions[0] = interfaceVersion.XML_DA_Version_1_0; Status.SupportedLocaleIDs = new string[1]; Status.SupportedLocaleIDs[0] = "IT"; Status.VendorInfo = "Vendor INFO"; Response.ReplyTime = System.DateTime.Now; return Response; }

95 Corso di Informatica industriale Salvataggio variabili Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

96 Salvare le variabili Supponiamo di voler memorizzare quante volte è stata attivata una determinata funzione, da quando il servizio è in run. Ovviamente tale valore andrebbe perso se il servizio dovesse smettere di funzionare e dovesse essere necessario il riavvio dei servizi. CLIENT callCounterVariable Attivazione della funzione SERVER

97 Salvare le variabili Creare un semplice Web Service come visto in precedenza.

98 Salvare le variabili Click destro sul nome del progetto e aggiungere una classe di applicazione globale

99 Salvare le variabili A questo punto il contenuto del progetto sarà:

100 Salvare le variabili

101 Caso senza salvataggio variabili

102 Salvare le variabili

103

104 Caso con salvataggio variabili (Global.asax)

105 Salvare le variabili Caso con salvataggio variabili (Service.cs)

106 Salvare le variabili

107 Arrestiamo e avviamo nuovamente IIS e vediamo cosa accade se richiamiamo la funzione

108 Salvare le variabili Il conteggio riprende da zero dato che lapplicazione è stata riavviata

109 Salvare le variabili E possibile memorizzare una variabile di livello applicativo direttamente nella classe del servizio (nel file Service.cs), a patto che sia inizializzata.


Scaricare ppt "Corso di Informatica industriale Creazione e pubblicazione di un web service in Visual Studio 2005 Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli."

Presentazioni simili


Annunci Google