Domanda

Ho un applicazione WPF in VS 2008 con alcuni riferimenti al servizio web.Per vari motivi (dimensione massima dei messaggi, dei metodi di autenticazione) ho bisogno di definire manualmente una serie di impostazioni del client WPF app.config per il binding del servizio.

Purtroppo, questo significa che quando aggiorno il servizio di riferimenti nel progetto si finisce con un pasticcio - di più associazioni e gli endpoint.Visual Studio crea nuove associazioni e gli endpoint con un suffisso numerico (cioè "Service1" come un duplicato di "Servizio"), risultante in una configurazione non valida come ci può essere solo un singolo vincolante per il servizio di riferimento in un progetto.

Questo è facile da duplicare - basta creare un semplice "Hello World" ASP.Net web service e applicazioni WPF in una soluzione, cambiare il maxBufferSize e maxReceivedMessageSize in app.config associazione e poi aggiornare il servizio di riferimento.

Al momento stiamo lavorando intorno a questo, semplicemente annullamento estrazione su app.config dopo l'aggiornamento dei riferimenti, ma non posso fare a meno di pensare che ci deve essere un modo migliore!

Inoltre, le impostazioni che abbiamo bisogno di modificare manualmente sono:

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

e:

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

Usiamo un servizio di classe factory quindi, se queste impostazioni sono in qualche modo in grado di impostare a livello di programmazione che avrebbe funzionato, anche se la proprietà non sembrano essere esposti.

È stato utile?

Soluzione

Creare un .File Bat che utilizza svcutil, per proxygeneration, che ha le impostazioni che è giusto per il vostro progetto.È abbastanza facile.Cliccando sul batfile, per generare nuove proxyfiles ogni volta che l'interfaccia sono stati modificati è facile.

Il lotto può poi essere utilizzato in automatico che costruisce.Allora avete solo bisogno di impostare l'app.config o web.config) una volta.Generalmente si separano le diverse configurazioni per diversi tipi di ambienti, come dev, test prod.

Esempio (guardare fuori per gli "a capo"):

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

Altri suggerimenti

Piuttosto che cambiare generato endpoint, un potrebbe aggiungere un secondo punto finale e vincolante definizione con la configurazione di cui avete bisogno, nel codice, basta mettere il nome del nuovo endpoint nel servizio client costruttore.

In qualche modo io preferisco usare svcutil.exe direttamente di usare "Aggiungi Riferimento al Servizio" funzionalità di Visual Studio :P Questo è quello che stiamo facendo sul nostro WCF progetti.

Prendo il tuo punto, svcutil è sicuramente il modo più avanzato per l'aggiunta e l'aggiornamento servizio di riferimento.Il suo solo un po ' più di lavoro manuale quando il "clic destro, aggiorna riferimento" è così vicino al proprio lavoro, in un unico passaggio.

Credo che si potrebbe creare alcuni file batch o qualcosa di semplicemente in output il codice di riferimento.Anche allora, manualmente verifica e l'aggiornamento del codice di servizio con svcutil probabilmente sarà più lavoro di quanto appena annullare il check-out il config.

Grazie per il consiglio, in ogni caso.

Quello che facciamo è il check-out (dal controllo del codice sorgente) app.config e *.cs i file che vengono generati automaticamente dal svcutil.exe utilità, quindi eseguire un file batch che esegue svcutil.exe per recuperare i metadati del servizio.Quando è fatto, abbiamo ricompilare il codice, assicurarsi che funziona, per poi verificare l'aggiornamento della app.config e *.cs nuovamente i file.È molto più affidabile rispetto all'utilizzo dell'oft-buggy "Aggiungi Riferimento al Servizio" con Visual Studio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top