我的 WCF 项目中有几个 Web 服务需要自定义 ServiceAuthorizationManager
才能对 OAuth 调用进行身份验证。为此,我创建了一个自定义 WebServiceHostFactory
。我正在连接 Ninject,很难将其转换为 NinjectWebServiceHostFactory
。这是我的代码:
public class MyServiceHostFactory : WebServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new MyServiceHost(serviceType, baseAddresses);
}
}
public class MyServiceHost: WebServiceHost
{
public MyServiceHost(Type serviceType, Uri[] baseAddresses)
: base(serviceType, baseAddresses)
{
Authorization.ServiceAuthorizationManager = new OAuthAuthorizationManager();
}
}
当我将 WebServiceHost
切换到 NinjectWebServiceHost
时,它会请求 IServiceBehavior
实现。我的 Web 服务上有一个 ServiceBehavior
属性,我的 web.config
中有一个 ServiceBehavior
部分。
有没有人见过这个并且能够成功地实现这样的东西?有没有更好的途径为我的 2 个网络服务连接起来?我不希望这影响我所有的网络服务。
最佳答案
我们前几天刚做过这个。我们发现更容易实现一种新型的 NinjectWebServiceHostFactory,它为我们连接了自定义 AuthorizationManager。
public class OAuthHostFactory : NinjectWebServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var host = base.CreateServiceHost(serviceType, baseAddresses);
host.Authorization.ServiceAuthorizationManager = new OAuthAuthorizationManager();
return host;
}
}
这使我们可以灵活地挑选和选择我们想要在哪些路由或 svc 上实现这个特定的工厂。
关于c# - Ninject - 创建自定义 NinjectWebServiceHost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11472883/