19 messaggi dal 03 ottobre 2018
Buongiorno a tutti,
ho un vecchio progetto basato su WebForms, in VB, .NET framework 4.5.1, su VS2017.

Sto progressivamente sostituendo o inserendo delle nuove funzionalità con WebAPI e front-end in Javascript.

Per fare questo ho inserito dei controller WebAPI nel mio progetto.

Questo giro sta funzionando perfettamente.

Rilevo solo un problema:

quando pubblico il progetto e lo carico sul server di produzione (Win 2012), perché le API funzionino, devo impostare sui file dei controller "Azione di compilazione" su "Compilazione"

invece quando eseguo il progetto sul pc con VS e IIS espress, al contrario devo impostare gli stessi file con "Azione di compilazione" su "Contenuto"

Se sul pc lascio i file su "compilazione", chiamando un'api mi da errore:

Si è verificato un errore. Sono stati trovati più tipi corrispondenti al controller denominato 'anagrafiche'. È possibile che la route utilizzata per questa richiesta ('api/{controller}/{id}') abbia individuato più controller definiti con lo stesso nome ma spazi dei nomi diversi.

La richiesta per 'anagrafiche' ha trovato i seguenti controller corrispondenti:
AnagraficheController
MioProgetto.AnagraficheController


Come se compilandolo lui comunque eseguisse quello che trova nel codice VB, anche se è impostato per essere compilato e non valutato come contenuto.

E' da notare che a parte i webforms, io ho moltissimi altri file .vb contenenti classi o moduli, ma questo errore me lo presenta solo sulle api.

Tutti i file .vb (esclusi i webforms) sono in subdirectory di app_code.
Per cui
app_code/api
app_code/export
app_code/security
etc etc

Io adesso sto aggirando il problema modificando ogni volta a mano "Azione di compilazione" ma chiaramente non può essere il modo giusto di procedere.

La mia sensazione come ho detto è che per qualche motivo i file .vb dei controller vengano comunque eseguiti, anche se mi sfugge il motivo.
L'altra cosa che non capisco è per quale motivo da una parte il controller appare nel namespace del progetto e dall'altra no.
Però il messaggio di errore non da elementi per capire quale sia quello compilato e quale sia quello del vb.

Grazie
Roberto
19 messaggi dal 03 ottobre 2018
Aiutatemi a capire per favore... il problema non è esposto in modo chiaro? O è talmente strano che nessuno ha mai avuto esperienza di cose del genere?
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
è una situazione un po' inusuale perché le applicazioni Web API vengono create come web applications, e non come web site come nel tuo caso. Comunque, non vuol dire che non sia possibile farla funzionare.

Secondo me dovresti provare a lasciare "Content" anche sui file di codice dei controller, proprio come gli altri file di codice.


quando pubblico il progetto e lo carico sul server di produzione (Win 2012), perché le API funzionino, devo impostare sui file dei controller "Azione di compilazione" su "Compilazione"

Cosa fai per pubblicare l'applicazione? Trattandosi di un sito web, dovresti trasferire pari pari i file sorgenti nel server, eventualmente aiutandoti con la funzione Copy Web di Visual Studio. Se funziona sul tuo pc di sviluppo, deve funzionare anche nel server.

ciao,
Moreno

Enjoy learning and just keep making
19 messaggi dal 03 ottobre 2018
Ciao Moreno,
in effetti tutta l'applicazione, compresa la vecchia parte webforms, è una web application, che compila tutto il codice in una dll.

La pubblico tramite il menu compilazione|pubblica <progetto>
Configurato per mettere tutto in una cartella sul filesystem.

Se metto controller come "content" (attenzione il resto del codice però è csu "compile"), quando lo pubblico va in errore.

Grazie
Ciao
Modificato da rrrobertorrr il 11 ottobre 2018 15.04 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ah, credevo fosse un website. Allora, dato che è una web application, non hai motivo di inserire i file di codice in App_Code. Per lo meno i controller li dovresti sistemare in un'altra cartella tipo /Controllers e impostare l'azione su Compile.

Enjoy learning and just keep making
19 messaggi dal 03 ottobre 2018
Urca.
Ha funzionato :)
Grazie!

Ho tolto la cartella dei controllers da sotto App_Code e l'ho spostata sotto la root del progetto, e ora girano correttamente con l'azione Compile anche sul mio pc.

Non mi è chiaro perché allora non ho lo stesso problema con tutto il resto del codice che ho in App_Code. Ho varie classi e moduli lì dentro che non danno lo stesso problema.
Anzi al contrario se li sposto fuori da App_Code quando mi dà errore:

Errore server nell'applicazione '/'.
Errore di compilazione
Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: BC30451: 'FillDataTable' is not declared. It may be inaccessible due to its protection level.
11.886 messaggi dal 09 febbraio 2002
Contributi

Non mi è chiaro perché allora non ho lo stesso problema con tutto il resto del codice che ho in App_Code

Ci sarà sicuramente una spiegazione ma senza vedere il codice non lo posso sapere.
Se puoi fornire un progetto minimale in cui si possa osservare il problema magari gli do un'occhiata.

ciao,
Moreno

Enjoy learning and just keep making
19 messaggi dal 03 ottobre 2018
No purtroppo il progetto è grande e non sono in grado di estrarne un subset per fare delle prove.

Poco male, il grosso è sistemato, rimaneva solo una questione di curiosità a questo punto più che altro.

Comunque il problema è chiaro.
A parte i controller, io in app_code ho dei moduli e delle classi, tutte con action Compile.
Ma che lui mi considera esclusivamente se si trovano all'interno di app_code. Se li muovo fuori è come se non esistessero.

A me sembra che più che dal codice dipenda da qualche impostazione del progetto/compilatore. Ha senso?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.