Question

Je rencontre ce problème lorsque j'écris un gestionnaire d'événements dans SharePoint. Mon gestionnaire d'événements a une référence Web. Lorsque je crée cette référence Web, l'URL du service Web sera ajoutée dans le fichier .config de l'assembly. Si je dois changer l'URL de référence Web, je dois juste changer le lien dans le fichier de configuration.

Le problème survient lorsque j'essaie de gérer le fichier DLL. Lorsque je GAC la DLL, le fichier de configuration ne peut pas être GAC avec la DLL, et par conséquent, il n’ya aucun moyen pour moi de mettre à jour la référence Web.

Une solution que j'ai trouvée consiste à modifier la méthode du constructeur, classe Reference.cs, générée automatiquement par Visual Studio lorsque j'ajoute une référence, afin que le constructeur lise l'URL du service Web depuis un autre emplacement, par exemple un registre ou un fichier XML. déposer dans un endroit prédéterminé. Mais cela pose parfois un problème, car lorsque je mets à jour le référencement Web à l’aide de Visual Studio, ce fichier Reference.cs est régénéré et toutes mes modifications sont perdues.

Existe-t-il un meilleur moyen de résoudre ce problème?

Était-ce utile?

La solution

Si vous utilisez Visual Studio 2008, utilisez une référence de service à la place d'une référence Web, qui générera des classes partielles que vous pourrez utiliser pour remplacer une fonctionnalité sans que votre code ne soit remplacé par le générateur.

Pour Visual Studio 2005, vous pouvez simplement ajouter le mot clé partial à la classe dans Reference.cs et conserver un fichier séparé avec votre propre classe partielle:

public partial class WebServiceReference
 { public WebServiceReference(ExampleConfigurationClass config) 
    { /* ... */
    }
 }

WebServiceReference svc = new WebServiceReference(myConfig);

Autres conseils

Toute application hébergée par SharePoint utilise le fichier web.config situé à la racine de votre site Web SharePoint dans IIS. Ce que vous devez faire est d’ajouter la configuration générée par l’assistant de référence Web / Service à votre fichier Web.config.

Voici à peu près comment cela fonctionne:

  • Le pool d’applications SharePoint charge votre DLL
  • Votre DLL recherche les informations de service dans le fichier de configuration de l'application en cours
  • Votre DLL trouve web.config et y recherche des informations de configuration

Fondamentalement, le fichier app.config généré dans votre DLL n'est pas utilisé. Dans ce cas, l’application est le pool d’applications (w3wp.exe) qui héberge l’application SharePoint. Pour SharePoint, app.config est en réalité nommé web.config et existe à la racine du site Web SharePoint.

J'ai résolu ce problème en rendant la référence Web dynamique pour ma bibliothèque de classes, puis en copiant la section de configuration applicationSettings contenant la référence Web à partir du fichier app.config dans mon site web.config sur Sharepoint.

Notez que vous devrez également copier l'entrée de applicationSettings dans votre web.config car celle-ci ne s'y trouve pas normalement.

Vous pouvez essayer ceci: Plutôt que d’utiliser la référence Web dynamique, faites-en une référence statique afin que le code dans Reference.cs ne recherche pas une valeur dans le fichier .config pour l’URL. Puis sous-classe le code client du service Web généré et dans cette classe dérivée, ajoutez votre propre logique pour définir la propriété .Url. Ensuite, VS.NET peut régénérer Reference.cs à sa guise, et votre code de paramétrage d’URL restera. Bien sûr, vous devez mettre à jour tout code en aval pour utiliser votre classe dérivée, mais cela devrait être un simple remplacement global.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top