Da nichts anderes ist der Trick, ich ‚betrogen‘ es wie folgt aus:
hinzufügen Message auf der Client-Seite:
using (OperationContextScope scope = new OperationContextScope(cli.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("MyHeader", Guid.NewGuid().ToString(), ""));
string ret = cli.GetData(1);
}
In der Eigenschaft „Name“ des Headers habe ich den Namen der Kopfzeile, die ich weitergeben möchte, und ich benutze den Namespace als Werthalter (da ich scheinbar nicht zu diesem "Wert" der Kopfzeile komme - er wird nicht als Eigenschaft angezeigt ?!). Ich mache das auf der Client-Seite jedes Mal, wenn ich eine Service-Instanz erstelle.
Dienst für las ich den Header wie:
var head = OperationContext.Current.IncomingMessageHeaders.FirstOrDefault(h => h.Name == "MyHeader");
string channelId = head.Namespace;
Es ist definitiv ein Hack, aber ich bin aus der Zeit, etwas eleganter zu schaffen, und dies ermöglicht es mir, ‚Kanal-ID‘ die Art und Weise zu halten I steuern kann es ... es ist eine hässliche Lösung, und ich mag es nicht, wenn jemand so etwas besseres findet würde ich es zu schätzen wissen ...
bearbeiten: ich habe versucht, Outgoing/IncomingMessageProperties verwenden, aber das doesn‘ Es scheint zu funktionieren - es ist nirgends auf der Server-Seite zu finden ... Ich vermisse wahrscheinlich etwas ...
Was ist der Anwendungsfall, was willst du damit erreichen? –
Wie ich geschrieben habe - ich versuche eine Log-in-Geschichte-Tabelle basierend auf Kanal-ID, die aufspüren würde, welche Methoden auf jedem Kanal aufgerufen wurden, während es geöffnet wurde. Auch, um zu verfolgen, welche Kanäle geöffnet sind (es ist für einige Geschäftslogik). – veljkoz
Wenn ich mich nicht irre, hat der Autor keinen SessionMode, so dass er nicht auf OperationContext.Current zugreifen kann, um den Sitzungsrückruf oder andere Informationen abzurufen. –