2015-04-23 76 views
0

我有具有SVC使用文件少激活我使用的是自定義的主機廠家不是默認的,下面爲什麼每次都調用WCF自定義的ServiceHostFactory?

<serviceHostingEnvironment> 
    <serviceActivations> 
     <add factory="String" 
      service="String"/> 
    </serviceActivations> 
</serviceHostingEnvironment> 

一個WCF服務(IIS 7.5中託管)。

而服務是WSTrustServiceContract。現在,如果你看到這個類

[ServiceBehaviorAttribute(Name = "SecurityTokenService", Namespace = "http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice", 
    InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 
[AspNetCompatibilityRequirementsAttribute(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class WSTrustServiceContract : IWSTrustFeb2005SyncContract, 
    IWSTrust13SyncContract, IWSTrustFeb2005AsyncContract, IWSTrust13AsyncContract, IWsdlExportExtension, IContractBehavior 

的聲明,使我們可以推斷,

  1. 定製主機工廠將被調用,以創建服務的實例。
  2. 一旦服務實例被創建,它會在那裏爲所有請求(InstanceContextMode.Single)

我的問題是

  1. 爲什麼找每個調用創建自定義主機工廠的實例(我在這個工廠的構造函數中有一個斷點,我通過附加到w3wc實例來進行調試)?
  2. 爲什麼我的服務實例是每次調用創建的?
+0

嘗試再次檢查您的配置。我試圖通過創建示例應用程序來模擬它,但它工作正常,只創建了自定義主機工廠和服務的一個實例。 –

+0

@Lukas:我應該檢查什麼配置? – ViBi

+0

你能告訴我你的自定義主機工廠如何創建該服務的實例嗎? –

回答

0

正如我所說的,我創建了簡單的應用程序,它的工作正常。因此,嘗試來比較:

的ServiceHost

Public Class MyServiceHost 
    Inherits ServiceHost 

    Public Sub New(serviceType As Type, baseAddresses As Uri()) 
     MyBase.New(serviceType, baseAddresses) 
    End Sub 

End Class 

Public Class MyServiceHostFactory 
    Inherits ServiceHostFactory 

    Public Sub New() 
     Trace.TraceInformation("MyServiceHost instance created.") 
    End Sub 

    Protected Overrides Function CreateServiceHost(serviceType As Type, baseAddresses As Uri()) As ServiceHost 
     Return New MyServiceHost(serviceType, baseAddresses) 
    End Function 

End Class 

服務

<ServiceContract> 
Public Interface IService 

    <OperationContract()> 
    Function SayHello(name As String) As String 

End Interface 

<ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single, ConcurrencyMode:=ConcurrencyMode.Multiple)> 
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> 
Public Class Service 
    Implements IService 

    Public Sub New() 
     Trace.TraceInformation("Service instance created.") 
    End Sub 

    Public Function SayHello(name As String) As String Implements IService.SayHello 
     Trace.TraceInformation("Calling Service.SayHello({0}).", name) 
     Return "Hello " & name 
    End Function 

End Class 

Public Class Global_asax 
    Inherits HttpApplication 

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
     Trace.TraceInformation("Application started") 
    End Sub 

End Class 

的Web.config

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
       <serviceMetadata httpGetEnabled="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> 
     <serviceActivations> 
      <add factory="FileLessActivationWithCustomServiceHost.MyServiceHostFactory" 
       service="FileLessActivationWithCustomServiceHost.Service" 
       relativeAddress="Service.svc"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

<system.diagnostics> 
    <trace autoflush="true" indentsize="4"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="Default" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="log.svclog" /> 
     </listeners> 
    </trace> 
</system.diagnostics> 

我開始的Web應用程序,由SayHello功能的幾個電話,正如你可以看到波紋管,它正確的行爲: enter image description here

+0

你的代碼是完美的,它會正常工作。在我的情況下,我沒有使用正常的服務合同。它是WSTrustServiceContract,它也在配置文件中配置。 – ViBi

相關問題