如何在 WCF 中调试 CustomServiceHostFactory?

How to debug CustomServiceHostFactory in WCF?

我最近实现了 CustomServiceHostFactory,想知道如何通过在代码中设置断点来调试它。这里是工厂:

public class CustomHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        ServiceHost host = new ServiceHost(serviceType, baseAddresses);

        //configure WsHttpBinding
        ConfigureServiceThrottling(host);

        return host;
    }

    private void ConfigureWshttpBinding(ServiceHost host)
    {
        //Do something here....
    }
    private void ConfigureServiceThrottling(ServiceHost host)
    {
        ServiceThrottlingBehavior throttle = host.Description.Behaviors.Find<ServiceThrottlingBehavior>();

        if (throttle == null)
        {
            throttle = new ServiceThrottlingBehavior
            {
                MaxConcurrentCalls = 100,
                MaxConcurrentSessions = 100,
                MaxConcurrentInstances = 100
            };

            host.Description.Behaviors.Add(throttle);
        }
    }
}

我在一个空的 Web 项目中创建它,这里是相关的 Web.config 内容。

  <service name="Company.Project.Business.Services.AccountService" behaviorConfiguration="MyServiceTypeBehaviors">
    <endpoint address=""
              binding="basicHttpBinding"
              contract="Company.Project.Business.Contracts.Service.IAccountService"/>
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>

  <service name="Company.Project.Business.Services.AccountClassService" behaviorConfiguration="MyServiceTypeBehaviors">
    <endpoint address="" 
              binding="basicHttpBinding" 
              contract="Company.Project.Business.Contracts.Service.IAccountClassService"/>
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />

  </service>               
</services>

<serviceHostingEnvironment>
  <!-- where virtual .svc files are defined -->
  <serviceActivations>        
    <add service="Company.Project.Business.Services.AccountService" 
         relativeAddress="AccountService.svc" 
         factory="Company.Project.WebHost.CustomHostFactory"/>

    <add service="Company.Project.Business.Services.AccountClassService" 
         relativeAddress="AccountClassService.svc" 
         factory="Company.Project.WebHost.CustomHostFactory"/>

  </serviceActivations>
</serviceHostingEnvironment> 

我将此发布到 IIS,并且可以成功浏览和使用服务。例如,这是一个路径。

http://company.server.local/Project/Account/AccountService.svc

我现在正尝试以编程方式应用具有 open/close/send 超时、readerQuotas 等的 WsHttpBinding。我正在尝试在代码中完成这一切,如果我可以进入 CustomeHostFactory 进行调试但是有不知道该怎么做。任何帮助深表感谢。谢谢。

好吧,我在这里完全糊涂了。我没有尝试附加到 w3wp 进程,而是将带有 CustomHostFactory 的项目设置为 Visual Studio 中的启动项目。我在受保护的重写 ServiceHost CreateServiceHost 方法中放置了一个断点。

然后,当我运行项目http://localhost:58326/ comes up in a browser. I then had to actually browse to an endpoint like so: http://localhost:58326/Account/AccountService.svc为了命中断点。

现在我可以调试服务的编程配置了。希望这对其他人有帮助。