Sto provando a scrivere del codice in C# che richiamerà immediatamente un servizio WCF importando il WSDL, esaminandolo e quindi effettuando le chiamate dinamicamente.Chiamare un servizio WCF senza generare un assembly
Il servizio che sto chiamando può cambiare di volta in volta, quindi se lo desidera voglio che il mio cliente sappia nuovi metodi e nuovi parametri di input e parametri di output per le chiamate, senza ricostruire il mio client.
Una possibile soluzione a questo è di importare e compilare un servizio di riferimento al volo.
qui descritte: Creating an assembly on the fly from a WSDL
desidero evitare la generazione di un assieme e poi riflettendo su di esso, se possibile.
Ho esaminato il codice del proxy dinamico nel collegamento e utilizzano una classe framework per eseguire l'importazione. Questa classe è WsdlImporter
. Così ho pensato benissimo - posso usarlo ed esaminare lo schema WSDL e determinare quali chiamate sono presenti e quali input e output sono disponibili.
Il problema è che le informazioni sul tipo sono mancanti negli oggetti MessagePartDescription
creati da WsdlImporter
. Apparentemente questo è mancante because it cannot find the types yet - see the response to the question from Brian.
Quindi qualche consiglio su come dovrei procedere? Sono completamente sulla strada sbagliata qui?
Può fare un esempio reale di come questo sarebbe utile? C'è un'interfaccia utente presentata a un utente del tuo client che consente di selezionare metodi da chiamare, forse una sorta di schedulatore o qualcosa del genere? Inoltre, cosa c'è di sbagliato nel creare un assembly al volo? Sembra abbastanza semplice. Stai immaginando qualcosa di più semplice del riflettere? Ho problemi a immaginare cosa sarebbe. – JohnOpincar
Questo sarà usato per chiamare un servizio WF. Il flusso di lavoro può cambiare - i passaggi possono essere aggiunti/rimossi, ecc. – Neil
@JohnOpincar - La mia obiezione non è la riflessione - è la compilazione al volo dell'assemblea. Sembra che sia un approccio che potrebbe causare problemi di sicurezza ad un certo punto e * potrebbe * essere fragile. Anche a me sembra strano quando tutte le informazioni sono nel WSDL e dato che alla fine le chiamate verranno tutte raccolte in qualcosa che somiglia molto a un'API dinamica che crea un livello dinamico con la riflessione su un livello statico che è stato creato dinamicamente che viene quindi mappato su un livello dinamico è un po 'troppo. Creare l'assembly al volo è il mio piano di backup. – Neil