2015-04-23 86 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

相关问题