Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C#] Wcf e Reflection

  1. #1

    [C#] Wcf e Reflection

    Ciao a tutti

    Volevo creare un servizio Wcf che abbia un interfaccia generica e che dipende dall'applicazione che scegli l'utente.

    Mi spiego meglio con un esempio:

    ammettiamo che io mi connetta tramite browser a un servizio wcf che ha un solo metodo ad esempio Connect(string name application) dove name application è il nome dell'applicazione che voglio scegliere.

    Sul server ci sono ammettiamo 10 applicazioni diverse in 10 dll, e tramite reflection li carico e me li gestisco.

    Ora il mio dubbio è come faccio a pubblicare i metodi presenti nelle dll nel servizio wcf? Considerano che ogni applicazione ha metodi completamente diversi dall'altra?

    Non so se sono riuscito a farvi capire il mio problema.

  2. #2
    Tanto per cominciare e' assurdo usare un implementazione generica in WCF poiche' devi esporre un contratto e come tale deve essere unico.
    Secondo, come fai a serializzare un itero assembly tramite una chiamata WCF? I metodi sono esposti in formato SOAP da WCF e dichiarati come DataContract e Operation. I dati che esponi devono obbligatoriamente avere la decorazione DataMemeber quindi la risposa a mio parere e' inequivocabilmente no.
    Se il tuo scopo e' quello di carica 'al volo' una dll io useri un approccio completamente diverso, tipo IOC o Assembly.LoadFrom e poi ci giochi tramite reflection nel client.
    Passare un assembly tramite WCF ha un costo esorbitante e non ne vedo l' utilita, capisco che scrivere codice e' faticoso ma ti sconsiglio vivamente di muoverti verso i generics con WCF perche' e' un approccio sbagliato

  3. #3
    Capito quindi in base alle mie conoscenze mi conviene fare un WCF per ogni progetto, e lasciare perdere sull'idea di fare un unico WCF per più progetti.

    Quindi 5 applicazioni 5 Wcf.

    Però avevo i dubbi su un'altra cosa riguardo il Wcf:

    Se io espongo il metodo Automobile GetAutomobile();

    Il Client come fa a conoscere il tipo Automobile?

  4. #4
    Ciao, premetto che WCF non l'ho mai usato.
    Cmq se è simile ai WebServices oltre ad esporre il metodo devi esporre anche il tipo.
    Quando referenzi il WebService ti crea un file con la dichiarazione di tutti i tipi
    con la signature
    public partial ...
    così all'interno del tuo progetto puoi anche aggiungere metodi e/o proprietà

  5. #5
    Originariamente inviato da ingnuccio
    Capito quindi in base alle mie conoscenze mi conviene fare un WCF per ogni progetto, e lasciare perdere sull'idea di fare un unico WCF per più progetti.

    Quindi 5 applicazioni 5 Wcf.

    Però avevo i dubbi su un'altra cosa riguardo il Wcf:

    Se io espongo il metodo Automobile GetAutomobile();

    Il Client come fa a conoscere il tipo Automobile?

    Grande mi hai dato uno spunto fantastico!!! Grazie

    Anche con Wcf è possibile fare una cosa del genere tramite DataContract in questo modo:

    [DataContract]
    public MyClass{

    [DataMember]
    string nome;

    [DataMember]
    string data;
    }

    In questo modo passo serializzato il tipo al client!

    Ora non mi rimane che risolvere l'ultimo problema. E cioè se questa classe MyClass si trova all'interno di un'assembly come faccio?

  6. #6
    Ma perchè essitono classi anche fuori dagli assembly??

    Intendi se la classe non è pubblica? Se non è pubblica non puoi farci nulla

  7. #7
    Originariamente inviato da Max Mercury
    Ma perchè essitono classi anche fuori dagli assembly??

    Intendi se la classe non è pubblica? Se non è pubblica non puoi farci nulla
    No la classe è pubblica come faccio ad esportarla?

    Considerando che dentro l'assembly non l'ho dichiarata in questo modo:

    [DataContract]
    public MyClass{

    [DataMember]
    string nome;

    [DataMember]
    string data;
    }

  8. #8
    Come ti ho detto Wcf non lo conosco, i webservice quando li referenzi si creano un file
    apposito dove dentro sono definite tutte le classi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.