我在项目中有一个WCF服务。 我有一个网络项目,里面有我的svc& svc.cs文件。
我的WCF服务已经写在不同的项目中,所以我只删除了所有的svc和svc.cs代码,并在我的svc文件中提供了标记,以引用我的WCF服务。
我已经成功托管了我的svc文件,我的WCF函数接收来自客户端的调用。 一切都很好,直到这里。
现在,我的WCF代码也有一些它引发的事件。我希望我的svc文件应该为这些事件提供处理程序。所以我在我的svc.cs文件中的构造函数中提供了这些处理程序。但是,我的svc.cs文件中的构造函数没有命中,因此我的WCF服务引发的事件没有被处理(在我的svc.cs文件中)。
我应该照顾什么?
我必须这样做的原因是因为我的WCF服务托管在控制台应用程序以及Windows服务中。这些主机也为WCF内部成功命中的事件提供处理程序。我应该如何在iis中托管我的WCF呢?
我的Servic1.svc是 -
<%@ServiceHost Language="C#" Debug="true" Service="MyServiceNameSpace.MyService" CodeBehind="Service1.svc.cs"%>
我的Service1.svc.cs是
public class Service1
{
static Service1()
{
//EventHandler1 is of type Func<string, string>
MyService.EventHandler1 = Service1_EventHandler1;
}
static string Service1_EventHandler1(string param1)
{
//event handling code
}
}
答案 0 :(得分:1)
为了在第一次Web服务调用之前调用服务的构造函数,请提供一个 ServiceHostFactory 来控制服务何时实现:
<%@ServiceHost Language="C#"
Debug="true"
Service="MyServiceNameSpace.MyService"
CodeBehind="Service1.svc.cs"
Factory="MyNS.MyServiceHostFactory
%>
然后实施工厂:
public class MyServiceHostFactory : ServiceHostFactory{
////////////////////////////////////////////////
// Service instanciated before first web service call
// and making subscription to the event
////////////////////////////////////////////////
private IService1 serviceInstance = new Service1();
protected override ServiceHost CreateServiceHost(
Type serviceType,
Uri[] baseAddresses ) {
ServiceHost host = new ServiceHost(serviceInstance);
// add the endpoints …
return host;
}
}
在上一个示例中,它是一个单例服务。 但 ServiceHostFactory 也可用于每次实例化不同的服务。
此致