9
votes

Bibliothèque de classe avec références de service

J'ai une bibliothèque de classe (.NET) avec une référence à un service Web (sur certains serveurs, pas un projet dans la même solution). La bibliothèque de classe a une classe exposée à COM. Cette classe invoque le service Web.

Lorsque j'ajoute la référence de service, cela ajoute du code à l'application de la bibliothèque de classe.

J'ai aussi une application de bureau dans la même solution, juste à des fins de test. Lorsque j'exécute cette application, cela jette cette exception:

n'a pas pu trouver l'élément de point d'extrémité par défaut qui références de contrat 'ServiceProxy.eventsServices' dans la section Configuration du client ServiceModel. Cela pourrait être car aucun fichier de configuration n'a été trouvé pour votre application ou car aucun élément de point d'extrémité correspondant à ce contrat n'a pu être trouvé dans l'élément client.

Cette exception peut être résolue en copiant et en collant le code généré pour la référence de service dans l'application de la bibliothèque de classe dans le fichier de configuration de l'application Desktop.

Lorsque je déploie, je dois uniquement déployer la DLL (construite à partir de la bibliothèque de classes) et non l'application de bureau. Je dois inclure la référence de service dans un fichier de configuration pouvant être lu par la DLL.

Toute suggestion?

Merci!


2 commentaires

Le seul moyen de faire cela est de copier à partir de l'application de la bibliothèque de classes.Config dans le fichier de configuration de l'application. C'est un duplicata de nombreuses autres questions ici.


Par exemple: Stackoverflow.com/Questtions/502919/...


3 Réponses :


6
votes

Lorsque vous ajoutez une référence de service, Visual Studio génère un proxy pour vous, qui lit le fichier app.config pour l'URL du service.

Vous avez la possibilité de fournir une URL statique Wich n'utilise pas le fichier de configuration.

Si vous souhaitez être compliqué et fournissez une URL dynamique sans les paramètres app.config, vous pouvez copier ce code généré et le modifier pour utiliser un autre type de source pour les données de configuration (comme paramètres, par exemple) et de cette façon. Vous pouvez déployer uniquement la DLL.

Le code généré est caché dans le code derrière la référence de service. Afin de voir le code, vous devez activer l'option "Afficher tous les fichiers" pour l'explorateur de la solution et rechercher le fichier refécence.cs (ou .vb) sous référence.map Fichier.

Ce code, vous ne devez pas modifier directement, mais copier le code, puis créer une nouvelle classe dans votre structure. (et supprimez la référence d'origine)

Remarque, que si vous modifiez le service (ou le WSDL), vous devez modifier la classe manuellement.


4 commentaires

Qu'est-ce que référence.cs a à voir avec sa question et pourquoi parlez-vous de la modifier? Je pense que vous devriez modifier votre question pour supprimer cette partie.


Parce que Bloparod ne veut pas utiliser la configuration, elle expose le service à com. Il doit modifier la dépendance de la proxy sur la configuration.


Mais rien de tout cela n'est en référence.cs.


Oui, le constructeur du proxy a cette référence, ce n'est que l'URL. Sauf si vous fournissez une URL statique. Si vous faites cela, vous n'avez pas besoin de fichier de configuration de toute façon.



2
votes

Toutes l'utilisation de l'API de configuration .NET reçoit la configuration du fichier de configuration de l'application. Un fichier de configuration DLL n'entraîne pas une telle chose - L'app.config que vous voyez dans votre bibliothèque de classe vous indique simplement ce que vous aurez besoin de copier.

Maintenant, si vous ne pouvez déployer que l'ensemble, votre assembly devra se configurer en code.


0 commentaires

3
votes

Merci à vous deux pour les réponses rapides =). Je vais prendre en compte.

Je viens de changer de référence de service à la référence Web. Cela supprime la nécessité d'avoir des informations de configuration dans le client (que dans mon cas est une application Delphi Desktop) et vraiment, je n'ai aucune idée de la façon de le faire = p.

Utiliser une référence Web plutôt qu'une référence de service produit la référence à être maintenue dans la bibliothèque de la classe. Comme David le dit, il est utilisé par le proxy et ne peut pas être changé d'un fichier de configuration car une DLL n'en a pas un (comme John dit).

Aujourd'hui, ma solution consistera à utiliser une référence Web. Je suppose que je devrai coder un mécanisme pour le rendre configurable à partir d'un fichier.

Encore une fois, grâce à vous deux!


0 commentaires