如何在 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为了命中断点。
现在我可以调试服务的编程配置了。希望这对其他人有帮助。
我最近实现了 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为了命中断点。
现在我可以调试服务的编程配置了。希望这对其他人有帮助。