簡體   English   中英

從svc.cs文件訪問WCF事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM