我正在使用一个由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"];
每次服务电话。
是否有一个更通用的catch-all-event可以检测到对我的服务的调用?可能有一个被许多Behavior / ChannelDispatcher类型中的一个触发,我承认它们并不完全理解
谢谢你的帮助,汤姆