[英]Accessing WCF's events from svc.cs file
我在項目中有WCF服務。 我有一個Web項目,其中有我的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
}
}
為了使服務的構造函數在第一次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也可以每次用於實例化不同的服務。
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.