Question

J'ai une application WPF dans VS 2008 avec certaines références de service Web. Pour différentes raisons (taille maximale du message, méthodes d'authentification), je dois définir manuellement un certain nombre de paramètres dans le fichier app.config du client WPF pour les liaisons de service.

Malheureusement, cela signifie que lorsque je mets à jour les références de service dans le projet, nous nous retrouvons avec un désordre: plusieurs liaisons et points de terminaison. Visual Studio crée de nouvelles liaisons et points de terminaison avec un suffixe numérique (par exemple, "Service1" en tant que duplicata de "Service"), ce qui entraîne une configuration non valide car il ne peut y avoir qu'une seule liaison par référence de service dans un projet.

C’est facile à dupliquer - créez simplement un " Hello World " simple Service Web ASP.Net et application WPF dans une solution, modifiez maxBufferSize et maxReceivedMessageSize dans la liaison app.config, puis mettez à jour la référence de service.

Pour le moment, nous travaillons à ce problème en annulant simplement le paiement sur app.config après la mise à jour des références, mais je ne peux pas m'empêcher de penser qu'il doit y avoir un meilleur moyen!

De plus, les paramètres que nous devons modifier manuellement sont les suivants:

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

et:

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

Nous utilisons une classe de fabrique de services. Par conséquent, si ces paramètres peuvent être définis de manière programmée, cela fonctionnerait, bien que les propriétés ne semblent pas exposées.

Était-ce utile?

La solution

Créez un fichier .bat qui utilise svcutil, pour la génération de proxy, les paramètres adaptés à votre projet. C'est assez facile. En cliquant sur le fichier de compilation, il est facile de générer de nouveaux fichiers de proxy chaque fois que l'interface a été modifiée.

Le lot peut ensuite être utilisé ultérieurement dans des versions automatisées. Ensuite, il vous suffit de configurer app.config (ou web.config) une seule fois. Nous séparons généralement les différentes configurations pour différents environnements, tels que dev, test prod.

Exemple (attention aux sauts de ligne):

REM generate meta data
call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"

REM making sure the file is writable
attrib -r "MyServiceProxy.cs"

REM create new proxy file
call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll" 

:

// W

Autres conseils

Plutôt que de changer le point de terminaison généré, vous pouvez ajouter un deuxième point de terminaison et une définition de liaison avec la configuration souhaitée, puis dans votre code, indiquez simplement le nom du nouveau point de terminaison dans le constructeur de votre client de service.

D'une manière ou d'une autre, je préfère utiliser directement svcutil.exe que d'utiliser le " Ajouter un service de référence " fonctionnalité de Visual Studio: P C’est ce que nous faisons sur nos projets WCF.

Je comprends ce que vous dites, svcutil est définitivement la manière la plus avancée d’ajouter et de mettre à jour des références de service. C’est un peu plus de travail manuel lorsque vous effectuez un clic droit, mettez à jour la référence " est si proche de travailler en une seule étape.

Je suppose que nous pourrions créer des fichiers de commandes ou quelque chose pour simplement sortir le code de référence. Même dans ce cas, extraire manuellement et mettre à jour le code de service avec svcutil demandera probablement plus de travail que d'annuler l'extraction de la configuration.

Merci pour le conseil dans tous les cas.

Ce que nous faisons, c'est extraire (du contrôle de code source) les fichiers app.config et * .cs générés automatiquement par l'utilitaire svcutil.exe, puis nous exécutons un fichier de commandes exécutant svcutil.exe pour extraire les métadonnées du service. . Lorsque cela est fait, nous recompilons le code, nous nous assurons qu'il fonctionne, puis vérifions les fichiers app.config et * .cs mis à jour. C'est beaucoup plus fiable que d'utiliser le code d'erreur "Ajouter un service de référence" " avec Visual Studio.

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