다른 트릭, 나는이처럼 '속임수'않습니다 아무것도 이후 :
는 클라이언트 측에서 MessageHeader 추가 : "이름"에서
using (OperationContextScope scope = new OperationContextScope(cli.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("MyHeader", Guid.NewGuid().ToString(), ""));
string ret = cli.GetData(1);
}
헤더의 속성은 내가 이름을 전달하고자하는 헤더의 값 네임 스페이스로 네임 스페이스를 사용하고 있습니다. (헤더의 'value'에 도달 할 수 없기 때문에 속성으로 노출되지 않습니다.)! 나는 서비스 인스턴스를 만들 때마다 클라이언트 쪽에서이 작업을 수행한다. 서비스에
내가 좋아하는 헤더 읽기 : 그것은 확실히 해킹,하지만 뭔가 더 우아한 만들 시간이있어,이 날 '채널 ID'방식을 유지할 수 있습니다
var head = OperationContext.Current.IncomingMessageHeaders.FirstOrDefault(h => h.Name == "MyHeader");
string channelId = head.Namespace;
를 I 그것을 제어 할 수 있습니다 ... 그것은 추한 솔루션입니다 그리고 나는 그것을 좋아하지 않아, 그래서 누군가가 뭔가 더 나은 발견 할 때마다 나는 그것을 감사하겠습니다 ...
편집 : 나는 발신/IncomingMessageProperties를 사용하여 시도하지만 '아무튼 작동하지 않는 것 같습니다 - 서버 측에서 찾을 수있는 곳이 없습니다 ... 아마 뭔가 누락 된 것 같습니다 ...
유스 케이스 란 무엇입니까? 이걸로 무엇을 이루고 싶습니까? –
필자가 작성한 것처럼 채널 ID를 기반으로하는 일부 기록 테이블에 로그를 만들려고합니다.이 테이블은 열리는 동안 각 채널에서 어떤 메소드가 호출되었는지 추적합니다. 또한 어떤 채널이 열렸는지를 추적 할 수있는 방법이 있습니다 (일부 비즈니스 로직 용). – veljkoz
저자가 SessionMode가 없다고 오해하지 않으면 세션 콜백 또는 기타 정보를 얻기 위해 OperationContext.Current에 액세스 할 수 없습니다. –