繁体   English   中英

这是托管WCF服务的正确方法吗?

[英]Is this a correct way to host a WCF service?

对于某些测试代码,我希望能够仅在几行中托管WCF服务。 我想我会写一个简单的托管类:

public class WcfHost<Implementation, Contract> : IDisposable
    where Implementation : class
    where Contract : class
{
    public readonly string Address = "net.tcp://localhost:8000/";
    private ServiceHost _Host;

    public WcfHost ()
    {
        _Host = new ServiceHost (typeof (Implementation));

        var binding = new NetTcpBinding ();
        var address = new Uri (Address);

        _Host.AddServiceEndpoint (
            typeof (Contract),
            binding,
            address);
        _Host.Open ();
    }

    public void Dispose ()
    {
        ((IDisposable) _Host).Dispose ();
    }
}

这可以像这样使用:

using (var host = new WcfHost<ImplementationClass, ContractClass> ()) {

这种方法有什么问题吗? 代码中是否存在缺陷(尤其是关于处置)?

如果主机处于“故障”状态,主机的Dispose方法可能会抛出异常。 如果发生这种情况,您将无法看到原始异常丢失时实际出现的问题。 对于测试代码,这可能不是问题,但如果你试图弄清楚为什么某些东西不起作用,它仍然会妨碍你。

我没有测试它,但在你的Dispose方法中应该没问题:

if (_Host.State == CommunicationState.Faulted)
{
    _Host.Abort();
}
else
{
    _Host.Close();
}

如果您对固定绑定和服务器地址的限制没有问题,这对我来说似乎很好。

你必须确保内的代码using持续时间,只要你想要的主机可用。

如果我要实现自主机,我会使用事件OnStart和OnStop将它放在Windows服务中。 另外,请执行以下更改以获得最佳实践:

  • 将端点配置放在App.Config文件中 - 更好地在生产环境中进行管理。
  • 将Host Service与实现和合同二进制文件分开。

您还可以查看MSDN: http//msdn.microsoft.com/en-us/library/ms730158%28v=VS.90%29.aspx有一个很好的如何“在Windows服务中托管服务”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM