Konvertieren der programmgesteuerten Konfiguration des WCF-Dienstes in die Konfigurationsdatei

8

Ich habe einen einfachen WCF-Webdienst geschrieben, der programmatisch konfiguriert ist. Es stellt drei Endpunkte zur Verfügung, die verschiedene Bindungen an denselben Vertrag binden:

  • WebHttpBinding
  • WebHttpRelayBinding (über Microsoft azure)
  • myBinding (selbstgemachte Bindung in einer zusätzlichen DLL)

Der Konfigurationscode ist im Moment ziemlich einfach:

%Vor%

Nun möchte ich diese Konfiguration in eine Konfigurationsdatei exportieren, da ich sie ändern möchte, ohne sie neu kompilieren zu müssen.

Meine Fragen in diesem Moment sind:

  • Wo kann ich wertvolle Informationen finden, um mein Ziel zu erreichen? Die meisten Websites sprechen nur über SOAP-Bindungen - kein Wort darüber, wie man eine Nicht-Standard-Bindung einbindet.
  • Muss ich MyBinding ändern, um die Konfiguration über app.config zu akzeptieren, oder ruft das ServiceModel es genau so auf, wie es mein programmatischer Ansatz tut, wenn die Konfiguration in Ordnung ist?
Etan 14.08.2009, 14:51
quelle

2 Antworten

11

OK, also sind die wichtigsten Dinge:

  • Adresse
  • bindend
  • Vertrag

und dann ein paar zusätzliche Sachen geworfen.

1) Adresse:

Holen Sie das von hier:

%Vor%

und hier:

%Vor%

Sie brauchen also etwas wie:

%Vor%

in Ihrem Service.

2) Bindung:

Der erste Endpunkt ist ein webHttpBinding, der zweite verwendet eine benutzerdefinierte Bindung ("MyBinding") - Sie haben also:

%Vor%

und Sie müssen Ihre benutzerdefinierte Bindung definieren:

%Vor%

oder erstellen Sie einen Abschnitt <extensions> für Ihre Bindung in Code in einer separaten Assembly gespeichert.

3) Verträge

Ich sehe keinen Vertrag eindeutig irgendwo - Sie verwenden immer nur den Typ (MyService), aber normalerweise ist dies der konkrete Service Instanz , nicht der Service Vertrag was sollte eine Schnittstelle (etwas wie IMyService ) sein. Warum haben Sie keinen ausdrücklichen Servicevertrag?

Wenn Ihre Service-Implementierung gleichzeitig der Vertrag ist (nicht Best Practice, aber möglich), dann haben Sie Ihre zwei Endpunkte wie folgt:

%Vor%

Sie müssen dann hier und da ein paar Streusel hinzufügen (definieren Sie die "Basisadresse" des Dienstes, geben Sie dem Dienst einen Namen usw.), und sollte etwa so enden:

%Vor%

Jetzt fehlt nur noch das definierte Verhalten - das lasse ich als Übung für das Poster: -)

Hilft das irgendetwas?

Wie für Referenzen - hmmm ..... schwer zu sagen .... Ich denke die üblichen Bücher ("Learning WCF" von MLBustamante für Anfänger / Fortgeschrittene, "Programmierung WCF" von Juval Lowy für Fortgeschrittene / Fortgeschrittene) sind meine beste Wette und viel Erfahrung, wirklich. Ich kenne keine Quelle, die explizit zeigt und lehrt, wie man zwischen Einstellungen in Code und Config umwandelt - die beiden erwähnten Bücher zeigen normalerweise beide Wege, und daraus können Sie selbst herausfinden.

Marc

    
marc_s 14.08.2009, 15:07
quelle
1

Das Prolem mit der Konfigurationsdatei konnte nicht korrekt erkannt werden.

musste nur hinzufügen

%Vor%

zu meinem Code, ich habe gedacht, dass das ServiceModel den Dienst automatisch startet, da es alle Informationen kennt. Es ist irgendwie komisch, dass Sie Informationen über "MyService" in die Konfigurationsdatei einfügen und anschließend auch im Code angeben müssen.

Die wirkliche Antwort auf mein Problem wurde jedoch von marc_s gegeben, der den gesamten Prozess der Konvertierung von der programmatischen Vorgehensweise in die Konfigurationsdatei sehr gut beschrieben hat.

    
Etan 17.08.2009 07:35
quelle