作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
希望这是一个简单的过程。我想知道这是否可能——也许不可能。我正在尝试自行托管 WCF 服务(在下面的示例中,它是一个控制台应用程序)。该服务没有默认构造函数。它仅包含一个参数签名构造函数。我需要该服务能够处理用户 session 。目前我正在使用 Ninject DI。这是我想出的一个简单的代码解决方案来演示我的问题:
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using Ninject.Modules;
namespace ConsoleApplication1
{
public class Program
{
static void Main()
{
using (var webServiceHost = new WebServiceHost(typeof(MyWcf)))
{
var webHttpBinding = new WebHttpBinding();
var uri = new Uri("http://localhost:8000/");
webServiceHost.AddServiceEndpoint(typeof(IMyWcf), webHttpBinding, uri);
webServiceHost.Open();
Console.WriteLine("Service is ready...");
Console.ReadKey();
}
}
}
[ServiceContract]
public interface IMyWcf
{
[OperationContract, WebGet(UriTemplate = "")]
string HelloWorld();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyWcf : IMyWcf
{
private readonly IMessage _customMessage = new Message("Default Message.");
public MyWcf(IMessage message)
{
_customMessage = message;
}
public string HelloWorld()
{
return _customMessage.Text;
}
}
public interface IMessage
{
string Text { get; }
}
public class Message : IMessage
{
public Message (string message)
{
Text = message;
}
public string Text { get; set; }
}
public class NinjectSetup : NinjectModule
{
public override void Load()
{
Bind<IMessage>().To<Message>()
.WithConstructorArgument("message", "Injected String Message.");
}
}
}
显然,注释掉参数化构造函数可以让服务运行。但这对我没有好处。我不想使用 ServiceHostFactory,因为这显然需要我有一个 .svc/IIS。有没有解决的办法?我可以创建一个继承自 WebServiceHost
的新 MyWebServiceHost
并重写一些为服务创建实例的方法吗?
最佳答案
使用上面 Ruben 的建议(在评论中),我能够在 Ninject.Extensions.Wcf 源存储库中找到一个工作示例。
关于wcf - 具有需要参数的服务的自托管(无 IIS 或 WAS)WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017630/
我是一名优秀的程序员,十分优秀!