我正在使用一个由 WPF 应用程序托管的非常简单的 WCF 项目。它基本上作为 REST 服务器运行,用于在我的 PC 上提供数据。没有 IIS,它作为 SingleInstance 运行。我想看看哪些 IP 正在访问 MyService,以及他们试图调用哪些 WebMethod。
好的,所以我可以将一个事件作为我的服务的一部分,在服务类本身中声明。这是一些让它运行的代码,它完全按预期工作(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"];
对于每个服务调用。
是否有更通用的包罗万象的事件可以检测到对我的服务的调用?我承认不完全理解的许多 Behaviour/ChannelDispatcher 类型中的一种可能会触发其中的一种。
谢谢你的帮助,汤姆