WPF 응용 프로그램에서 호스팅되는 매우 간단한 WCF 프로젝트를 사용하고 있습니다. 기본적으로 내 PC에서 데이터를 정리하는 REST 서버로 작동합니다. IIS가없고 SingleInstance로 실행됩니다. 어떤 IP가 MyService에 액세스하고 있으며 어떤 WebMethod가 호출하려고하는지 알고 싶습니다.글로벌 WCF ServiceHost 요청 이벤트 캡처
좋아, 그래서 서비스 클래스 자체에서 선언 된 내 서비스의 일부로 이벤트를 가질 수 있습니다. (제발 m_
에 대한 어떤 불꽃) 여기가는 도착 일부 코드는 모두가 예상대로 정확하게 작동의) : 내 응용 프로그램이 알 수 있도록
MyService ds = new MyService(); // It's not really called this :)
ds.Request += new EventHandler(ds_Request); // I want to avoid this
ds.SomePropertySetFromMyRehostingClient = "something"; // SingleInstance now required
m_Service = new ServiceHost(ds, new Uri(GetServerHostUri()));
m_Service.Description.Behaviors.Find<ServiceBehaviorAttribute>().InstanceContextMode = InstanceContextMode.Single;
m_Service.BeginOpen(new TimeSpan(0, 0, 5), new AsyncCallback(EndStartService), null);
그런 다음 각 서비스 방법에서,이 이벤트를 발생시킬 수 사람 그것을 사용하려고했습니다. 똑똑하지만 얼굴을 보자. 이것은 끔찍한 일이다. 각 서비스 호출에 대한
var who = OperationContext.Current.IncomingMessageProperties.Via;
var what = OperationContext.Current.IncomingMessageProperties["UriTemplateMatchResults"];
:
나는의 라인을 따라 뭔가를 작성해야합니다.
내 서비스 호출을 감지 할 수있는 좀 더 일반적인 catch-all-event가 있습니까? 내가 충분히 이해하지 못하는 많은 Behavior/ChannelDispatcher 유형 중 하나에 의해 해고당한 사람이있을 것입니다. IParameterInspector
를 사용하여 당신의 도움, 톰
예! 그게 다야! 좋은 물건, 당신은 분명히 이것 모두를 안다. 실제로 IParameterInspector를 사용하는 것이 아니라 IDispatchMessageInspector.AfterReceiveRequest() 구현이 트릭을 수행하는 것처럼 보였습니다. 적절히 처리 된 데이터를 반환하는 이벤트를 바인딩 한 후이를 Behavior로 추가하기 만하면됩니다. 감사! – Tom
그것이 당신을 위해 일해 주셔서 감사합니다. 감사 호출에'IParameterInspector'를 사용합니다. – Aliostad