WebService in Applicazione Windows

martedì 29 aprile 2014 - 09.03
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Visual Studio 2005

mmjc23 Profilo | Newbie

Buongiorno a tutti

Ho un problema di questo tipo...
Ho realizzato una applicazione Windows Form (Vb.Net 2005) che comunica con diverse interfacce Hardware e che è in grado di comunicare e passare i dati (via Socket) ad altre applicazioni Windows mediante una dll vb.net.
Ho ora l'esigenza di comunicare con altre applicazioni che non girano su sistemi Microsoft e che non possono quindi integrare la mia dll, ma che sarebbero, invece, in grado di sfruttare un WebService.

L'idea, era quella di creare un nuovo Progetto Web Service all'interno della mia soluzione vb.net, ed "esporre i metodi" per consentire la comunicazione tra le due applicazioni
Nel "Main" della mia applicazione Vb.Net, quindi, ho inizializzato la classe del progetto Web Service, ma, diversamente da quanto accade con una nuova applicazione di tipo Web Service, quando avvio la mia applicazione, non viene eseguito/avviato il "Server di sviluppo ASP.NET" (per intenderci, quell'icona nella Taskbar che indica che consente di interagire con il servizio Web).

E' possibile fare in modo che un'applicazione Windows possa anche "esporre" un WebService?
In tal caso, come devo procedere?

Grazie e Buona giornata

algraps Profilo | Junior Member

>Buongiorno a tutti
>
>Ho un problema di questo tipo...
>Ho realizzato una applicazione Windows Form (Vb.Net 2005) che
>comunica con diverse interfacce Hardware e che è in grado di
>comunicare e passare i dati (via Socket) ad altre applicazioni
>Windows mediante una dll vb.net.
>Ho ora l'esigenza di comunicare con altre applicazioni che non
>girano su sistemi Microsoft e che non possono quindi integrare
>la mia dll, ma che sarebbero, invece, in grado di sfruttare un
>WebService.
>
>L'idea, era quella di creare un nuovo Progetto Web Service all'interno
>della mia soluzione vb.net, ed "esporre i metodi" per consentire
>la comunicazione tra le due applicazioni
>Nel "Main" della mia applicazione Vb.Net, quindi, ho inizializzato
>la classe del progetto Web Service, ma, diversamente da quanto
>accade con una nuova applicazione di tipo Web Service, quando
>avvio la mia applicazione, non viene eseguito/avviato il "Server
>di sviluppo ASP.NET" (per intenderci, quell'icona nella Taskbar
>che indica che consente di interagire con il servizio Web).
>
>E' possibile fare in modo che un'applicazione Windows possa anche
>"esporre" un WebService?
>In tal caso, come devo procedere?
>
>Grazie e Buona giornata

Ciao,
senza complicarti la vita potresti creare una nuovo progetto WCF e creare li il tuo webservice che espone i metodi.
Il server non viene eseguito perche' di default VS in debug esegue solo un progetto alla volta. Devi aprire le proprietä della solution e selezionare multiple progejct. Oppure puoi creare una piccola console application che viene eseguita solo in debug e che avvii i tuoi web services...

Ciao
Al.

A.G.
http://nothingnessit.wordpress.com/

mmjc23 Profilo | Newbie

Ciao Alessandro e Grazie mille per la risposta.

Purtroppo, non ho idea di cosa sia WCF ma credo che nel framework 2.0 utilizzato, non sia nemmeno disponibile.
Vorrei inoltre evitare di avere applicazioni esterne che lanciano servizi web, anche perchè ho bisogno di gestire nella mia applicazione i dati che verranno passati al WebService.
La soluzione più semplice, presumo sia quella dell'avvio di "progetti multipli"; aggiungendo infatti il nuovo progetto tra i progetti da avviare, il Server ASP, viene avviato correttamente e, con esso, la pagina IE.

Ma questa impostazione è utile solo per poter eseguire il Debug dei progetti e sarebbe sufficiente inizializzare la classe del progetto webservice nel Main oppure DEVE essere così settato anche Runtime per poter funzionare?
Grazie mille
Matteo

algraps Profilo | Junior Member

>Ciao Alessandro e Grazie mille per la risposta.
>
>Purtroppo, non ho idea di cosa sia WCF ma credo che nel framework
>2.0 utilizzato, non sia nemmeno disponibile.
>Vorrei inoltre evitare di avere applicazioni esterne che lanciano
>servizi web, anche perchè ho bisogno di gestire nella mia applicazione
>i dati che verranno passati al WebService.
>La soluzione più semplice, presumo sia quella dell'avvio di "progetti
>multipli"; aggiungendo infatti il nuovo progetto tra i progetti
>da avviare, il Server ASP, viene avviato correttamente e, con
>esso, la pagina IE.
>
>Ma questa impostazione è utile solo per poter eseguire il Debug
>dei progetti e sarebbe sufficiente inizializzare la classe del
>progetto webservice nel Main oppure DEVE essere così settato
>anche Runtime per poter funzionare?
>Grazie mille
>Matteo

Ciao Matteo,
WCF nel .net 2 non ü possibile. Devi creare un servizio asmx (Webservice) alla vecchia maniera.. Per il debug ok. ma per la produzione tu hai bisogno di configurare i tuoi servizi su IIS . Altrimenti ti devi progettare un IIS... ma ü una cosa fuori dal mondo..
Per la produzione devi avere iis per esporre i tuoi servizi...

Ciao
Al.
A.G.
http://nothingnessit.wordpress.com/

mmjc23 Profilo | Newbie

Perfetto...continuo quindi su questa strada...avvio di progetti multipli e, runtime, configurerò il servizio IIS per gestire il mio WebService.

Grazie mille
Ciao e Buona giornata

algraps Profilo | Junior Member

>Perfetto...continuo quindi su questa strada...avvio di progetti
>multipli e, runtime, configurerò il servizio IIS per gestire
>il mio WebService.
>
>Grazie mille
>Ciao e Buona giornata

Esatto.. Puoi configurarlo per poter debuggare il tuo progetto. Pero' poi quando sarai in produzione avrai bisogno di configurare ed installare i tuoi webservice su iis.

Ciao
Al.

A.G.
http://nothingnessit.wordpress.com/

mmjc23 Profilo | Newbie

Sempre io...
Purtroppo ho qualche problemino, credo più di "Logica di sviluppo" del WebService...spero di riuscire a spiegarmi.
Allora...ho la mia soluzione Vb.Net che, all'avvio, mi istanzia una classe "Core" che è quella che istanzia e gestisce tutte gli altri progetti/classi (e quindi i relativi servizi: Client Socket, Gestore DB, Gestione seriali, ecc. ecc.)

Dovendo ora gestire anche il servizio WebService, ho pensato "bene" di:
-aggiungere un nuovo progetto WebService (classico esempio "Hello World")
-importare nel progetto "Core" il riferimento al progetto WebService
-Nella classe/progetto core, instanziare una nuova variabile WithEvents di tipo "classe del webservice"
-nella "classe del webservice", su chiamata della funzione "HelloWorld", alzare l'evento.
In questo modo, mi aspettavo di poter gestire nella classe "Core" le chiamate effettuate al WebService...ma così non è, in quanto l'istruzione RaiseEvent viene eseguita, ma l'evento non scatta nella classe Core.

Se, invece, nel progetto WebService, importo il riferimento al progetto "Core" e instanzio una variabile di tipo "classe del Core" e chiamo un suo metodo...funziona correttamente.
Il Problema è che mi sembra "logicamente sbagliato" che il WebService instanzi una classe del "Core" in quanto il Core è appunto il cuore dell'applicazione, quindi, di istanze Core, ce ne deve essere una e una sola, che gestisce tutti i diversi servizi come "classi figlie" (e che alzano eventi al Core).
Dove sbaglio?
Probabilmente ragiono in modo errato considerando il WebService come un "sotto-progetto WinForm" quando, invece, il WebService vive indipendentemente dal fatto che l'applicazione Vb.Net sia attiva o meno; ma, per come funziona la mia applicazione, il WebService, mi serve solo come "vettore di scambio dati", che vengono elaborate dal "Core". Quindi, se l'applicazione è giù, il WebService non deve effettuare alcuna operazione...
Grazie ancora e scusate la spiegazione contorta

mmjc23 Profilo | Newbie

Mi sa che mi conviene aggiornare la mia applicazione ai nuovi Framework in modo da poter utilizzare almeno WCF.
Ma con WCF risolvo il problema descritto nel post sopra?
Grazie

mmjc23 Profilo | Newbie

Ho provato a convertire l'applicazione al Framework 3.5 SP1 con VS2010 e ha creare un nuovo progetto WCF.
Se nella classe/progetto Core, provo ad instanziare una variabile di tipo "Classe WCF", i suoi eventi (raiseevent) non vengono comunque scatenati nella classe Core.

Probabilmente ragiono in modo errato; forse, il fatto di aggiungere il riferimento del progetto WCF al progetto Core, non significa che posso "comunicare con esso" come una normale classe di un progetto WinForm, ma significa che la classe Core usufruisce di tale servizio WCF alla stregua di un qualsiasi client.
E' corretto?

Non funzionando gli eventi, devo quindi utilizzare i "Callbacks"? In questo modo però, non solo la mia applicazione Server riceverà "l'evento" da WCF ma bensì tutti i Client....è corretto?
Qualcuno sa darmi qualche indicazione?
Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5