2012-04-02 4 views
0

Ich erstelle einen WCF-Dienst. Zuerst hatte ich ein WCF-Service-Bibliotheksprojekt und ein Konsolenprojekt, das auf diese Bibliothek referenzierte. Und es funktionierte gut, wenn ich in meinem Clientprojekt "Dienstreferenz hinzufügen" verwendete, solange die Dienstbibliothek über eine gültige App.Config-Datei verfügte.Ist es möglich, die Option "Dienstverweis hinzufügen" zu verwenden, um einen selbst gehosteten Dienst in WCF hinzuzufügen?

Nun möchte ich jedoch die Service-Bibliothek und den Konsolen-Host in einem Konsolenprojekt kombinieren. Schließlich war das vorherige Konsolenprojekt ziemlich einfach. Aber hier kommt das Problem: Wenn ich "Service-Referenz hinzufügen" auswähle und den in der App.config-Datei des neuen Konsolenprojekts definierten Endpunkt angibt, kann keine Service-Referenz gefunden werden. Ich nehme es, weil der Dienst nicht von der Datei "wcfsvchost.exe" gehostet wird, wenn die Funktion zum Hinzufügen eines Diensts aktiviert ist (und ich denke, dass es Sinn macht). Aber ich kann mir keinen Weg vorstellen, wie es funktioniert. Wie soll ich eine Servicereferenz hinzufügen, wenn es sich bei meinem Service um ein einzelnes, von einer Konsole gehostetes Projekt handelt?

+0

** Ja natürlich! ** Warum fragst du ?? Der Dienst muss betriebsbereit sein - dann können Sie für diesen Dienst unbedingt eine 'Dienst-Referenz hinzufügen- durchführen. Schließlich: Es ist nur ein WCF-Dienst - wie es gehostet wird, ist absolut irrelevant für den Client, der es anruft ..... –

+0

@marc_s Danke. Ich habe vergessen, eine Sache zu erwähnen: Ich habe versucht, "Service-Referenz hinzufügen" mit meiner ursprünglichen Service-Bibliothek (so dass wcfsvchost diesen Service ausführen wird), die genau die gleichen Dateien und app.config wie meine kombinierte Konsole hat. Aber wenn ich diese Bibliothek entladen habe und die kombinierte Konsole ausgeführt habe (ich nehme an, dass diese beiden Dienste identisch sind, so dass die zuvor generierte Dienstreferenz auch für die neue verwendet werden kann), sagt mein Client "kann Endpunkt nicht finden". Ich vermute, dass es etwas gibt, das ich mit der generierten Service-Referenz ändern muss, aber was genau sind sie? – tete

Antwort

0

Der einfachste Weg für Sie ist, den WCF-Dienst auszuführen, eine Servicereferenz zu generieren und sie dann in einer einzelnen Anwendung zu kombinieren. Alles, was Sie tun müssen, ist nur die Adresse in Ihrer app.config zu ändern. Aber seien Sie vorsichtig damit, da Sie die Adresse für den Client-Teil und nicht den Server-Teil von app.config ändern sollten.

Dieser Ansatz wird jedoch in Zukunft schwierig zu pflegen sein, wenn Sie sich dazu entschließen, Ihren Servicedatenvertrag zu ändern und die Servicereferenz neu zu generieren. Möglicherweise möchten Sie Folgendes berücksichtigen: Servicereferenz in Assembly umbrechen und stattdessen Assembly verwenden. Auf diese Weise können Sie Ihre Servicereferenz bei Bedarf neu generieren.

+0

Danke für Ihre Hilfe. Könntest du genauer sagen, welche Änderung ich vornehmen soll, um die Adresse in app.config zu ändern? Weil ich die Service-Referenz aus meiner Servicebibliothek ausprobiert habe, die im Grunde die gleiche Einstellung wie mein kombiniertes Konsolenprojekt verwendet. Aber wenn ich die kombinierte Konsole starte (ich habe die Dienstbibliothek entladen, so dass wcfsvchost.exe diese Version nicht hostet), die genau den gleichen Dienst wie die Dienstbibliothek hosten sollte, sagt mein Client, dass der Endpunkt nicht gefunden wurde. Ich vermute es liegt daran, dass da etwas anderes ist und ich mich ändern muss. Aber ich kann einfach nicht herausfinden, was – tete

+0

@tete Könnten Sie Ihre kombinierte app.config in der Frage veröffentlichen? Sie können sensible Informationen entfernen. Es kann auch der Fall sein, dass Sie Anfragen senden, bevor der WCF-Dienst gestartet ist und –

+0

sicher ausgeführt wird, siehe mein Update des ursprünglichen Beitrags. – tete

Verwandte Themen