WCF - Namenskonventionen?

23/09/2007 - 13:31 von Carsten Posingies | Report spam
Hallo, NG,

ich verzweifele hier langsam... Es geht darum, welche Namen(steile) von
Namespaces und Assemblys und Konfigurationseinstellungen bei einer
WCF-Anwendung übereinstimmen müssen.

Konkret:

Ich habe drei Namensràume, sagen wir "client" und "common". In "common"
sind alle Datentypen und Schnittstellen abgelegt, die beide Seiten
brauchen. So gibts zum Beispiel "common.IDuplexMessage" und
"common.IDuplexResponse", ebenso wie "common.IDuplexSender" und
"common.IDuplexReceiver". Die Ausgabe-Dll heiße fürs erste "common.dll".
In den Config-Dateien sieht's dann so aus:

App.config für den Client: (snip)

<endpoint contract="common.IDuplexReceiver" ...>...</endpoint>

Web.config für den Service: (snip)

<service name="common.DuplexReceiver" ...>...</service>
<endpoint contract="common.IDuplexReceiver" ...>...</endpoint>
...
</service>

Und eine service.svc:

<%@ ServiceHost Service="Common.DuplexReceiver" %>

So weit, so gut. DAS funktioniert so auch alles. Ist ja auch nur ein
Test gewesen, wie gesagt, aus purer Verzweiflung. Und hat mich ewig
gebraucht, um es mal zum Laufen zu kriegen. Denn, nun geht's los:

* benenne ich die DLL anders, gibt's keine Antwort mehr.
* benenne ich den Namespace "common" /überall/, also
sowohl in den Config-Dateien, in der .svc-Datei, überall
im Code, in den Interface-Attributen etc. etc. um -- und
sogar dann, wenn ich die DLL entsprechend umbenenne, also
etwa von "common" in "CP.Common" plus "common.dll" in
"CP.Common.dll" -- natürlich auch auf der Client-Seite:
gibt es /keine/ Antwort (sondern ein Timeout von -- je
nach meinen Versuchen -- der "base.Channel.SendMessage()"
Methode oder von "sender.Close()".

Was zum Teufel übersehe ich hier? Was habe ich nicht gelesen? Dürfen
WCF-Dienste nur "[A-Za-z]\.[A-Za-z]" heißen, statt dass mehrere Punkte
drin stehen in den Namen?

Ich würde ja Code beilegen, aber ich habe keinen blanken Schimmer,
welcher das sein sollte!

Ich bin für jeden Hinweis dankbar, wie immer auch für "RTFM" mit nem
Link.

/Ich will doch nur meine Standard-Namespaces behalten dürfen... *seufz*/

Carsten
 

Lesen sie die antworten

#1 Carsten Posingies
23/09/2007 - 14:48 | Warnen spam
Nachtrag zu meiner Anfrage...

Aus diversen Gründen kommt für mich der Einsatz von svcutil nicht
infrage, um die Client-Seite zu erzeugen, falls mir das jemand nah legen
möchte. Schon deswegen nicht, weil die erzeugten Sourcen null Namespace
enthalten und ne Menge Zeug, das ich nicht brauche. Zweiter Grund ist,
dass, da meine Bibliothek, an der ich bastle, auch peer-fàhig sein soll,
d.h. es geht nicht, dass auf dem "server" interface X so und so und auf
dem "client" dasselbe interface X anders implementiert wird, da die
beiden Peers jederzeit (und auch parallel) beide Rollen haben können. Am
Ende möchte ich also tunlichst genau zwei Assemblys haben, in der einen
die Contracts, in der anderen die Implementationen. Zweiteres
widerspricht aber genau dem, was bei svcutil heraus kommt.

So, nochmal Dank vorab und schönen Rest vom Sonntag,

Carsten

Ähnliche fragen