在IIS中托管时,使用WebServiceHost的正确方法是什么?
请注意,我没有.svc文件,也不想要一个。因此,我有无扩展的url。我正在使用尼尼姆注入回购等服务。虽然它能工作,但我不记得我以前是怎么做的,而且我现在这样做是错误的--它实际上就像一个自托管的--我需要服务来参与IIS管道(使用相同的端口,与AppPool一起启动/关闭).
我添加了一个对Ninject.Extensions.WCF的引用,它在我的App_Start文件夹中创建了NinectWebCommon.cs。在此范围内,我正在按以下方式连接服务(但我不想指定url/port,我希望它参与适当的生命周期)
private static void RegisterServices(IKernel kernel)
{
var port = 8080;
var uri = new Uri(String.Format("http://{0}:{1}/api", Environment.MachineName, port));
var baseAddr = new Uri[] { uri };
var binding = new WebHttpBinding(WebHttpSecurityMode.None);
var endPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(MyServiceClassHere))
, binding, new EndpointAddress(uri));
kernel.Bind<IProjectRepository>().To<MyRepo>();
kernel.Bind<WebServiceHost>().To<NinjectWebServiceHost>()
.WithConstructorArgument("serviceType", typeof(MyServiceClassHere))
.WithConstructorArgument("baseAddresses", baseAddr);
var webBehavior = new WebHttpBehavior() { HelpEnabled = true };
endPoint.Behaviors.Add(webBehavior);
_host = kernel.Get<WebServiceHost>();
_host.AddServiceEndpoint(endPoint);
_host.Open();
} 请你帮助我的最佳做法,连接服务使用尼尼姆。
提前谢谢。
发布于 2013-11-16 08:53:18
这篇博文帮助我在IIS:http://www.aaronstannard.com/post/2011/08/16/dependency-injection-ninject-wcf-service.aspx中托管的WCF服务中启动并运行Ninject。
我必须重写NinjectModule上的Load方法:
public class WCFNinjectModule : NinjectModule
{
public override void Load()
{
Bind<IProjectRepository>().To<MyRepo>();
}
}然后在global.asax中,我必须重写CreateKernel()方法。
protected override IKernel CreateKernel()
{
StandardKernel kernel = new StandardKernel(new WCFNinjectModule());
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
return kernel;
}https://stackoverflow.com/questions/19123068
复制相似问题