Frage

Ich habe eine WPF-Anwendung in VS 2008 mit einigen Web-Service-Referenzen. Aus unterschiedlichen Gründen (max Nachrichtengröße, Authentifizierungsmethoden) Ich muß manuell eine Reihe von Einstellungen in dem app.config für die Service-Bindungen des WPF-Client definieren.

Leider bedeutet dies, dass, wenn ich die Service-Referenzen im Projekt, das wir mit einem Durcheinander am Ende aktualisieren - mehr Bindungen und Endpunkten. Visual Studio erstellt neue Bindungen und Endpunkte mit einem numerischen Suffix (zB „Service1“ als Duplikat von „Service“), in einer ungültigen Konfiguration führt, wie es nur in einem Projekt eine einzige Bindung pro Dienstverweis sein kann.

Dies ist leicht zu duplizieren -. Erstellen nur einen einfachen „Hallo Welt“ ASP.Net Web-Service und WPF-Anwendung in einer Lösung, die MaxBufferSize und MaxReceivedMessageSize in der app.config ändern Bindung und dann den Dienstverweis aktualisieren

Im Moment haben wir um diese arbeiten durch einfaches Lösen der Kasse auf der app.config nach die Verweise zu aktualisieren, aber ich kann nicht helfen, aber denke, es muss einen besseren Weg geben!

Auch die Einstellungen, die wir manuell ändern müssen, sind:

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

und

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

Wir verwenden eine Service Factory-Klasse so, wenn diese Einstellungen irgendwie in der Lage sind programmatisch festgelegt werden, dass funktionieren würde, obwohl die Eigenschaften scheinen nicht ausgesetzt werden.

War es hilfreich?

Lösung

Erstellen Sie eine BAT-Datei, die svcutil verwendet, für proxygeneration, dass die Einstellungen, die für Ihr Projekt richtig ist. Es ist ziemlich einfach. Ein Klick auf dem batfile, neue proxyfiles zu generieren, wenn die Schnittstelle geändert worden ist einfach.

Der Ansatz kann dann später in verwendet werden automatisiert erstellt. Dann müssen Sie nur die app.config (oder web.config) einmal einzurichten. Wir trennen im Allgemeinen die verschiedenen Konfigurationen für unterschiedliche Umgebungen wie Entwickler, Test prod.

Beispiel (achten Sie auf Zeilenumbrüche):

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

Andere Tipps

Anstatt die erzeugte Endpunkt zu ändern, uou einen zweiten Endpunkt und verbindliche Definition mit der Konfiguration nur den Namen des neuen Endpunkts in Ihrem Service-Client-Konstruktor setzen Sie benötigen, dann in Ihrem Code hinzufügen könnte.

Irgendwie ziehe ich mit svcutil.exe direkt als das verwenden „Dienstverweis hinzufügen“ Feature von Visual Studio. P Dies ist, was wir auf unserer WCF Projekte tun

ich Ihren Punkt nehmen, svcutil ist auf jeden Fall die erweiterte Möglichkeit des Hinzufügens und Update-Service Referenzen. Es ist nur ein gutes Stück mehr Handarbeit als „Rechtsklick, update reference“ so nah in einem einzigen Schritt gerade arbeiten.

Ich denke, wir könnten einige Batch-Dateien oder etwas nur Ausgabe des Referenzcodes erstellen. Selbst dann manuell überprüft und den Service-Code mit svcutil Aktualisierung wird wahrscheinlich mehr Arbeit als nur die Check-out auf der Config rückgängig gemacht.

Danke für den Rat auf jeden Fall.

Was wir tun, ist, dass wir (aus der Quellcodeverwaltung) überprüfen die app.config und * CS-Dateien, die von dem svcutil.exe Dienstprogramm automatisch generiert werden, dann führen wir eine Batchdatei, die svcutil.exe führt die Dienstmetadaten abrufen . Wenn es fertig ist, neu kompiliert werden wir den Code, stellen Sie sicher, dass es funktioniert, dann die aktualisierte app.config überprüfen und * .cs-Dateien zurück. Es ist eine ganze Menge zuverlässiger als die oft Buggy „Add Service Reference“ mit Visual Studio.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top