【问题标题】:Hosting WCF service on linux在 Linux 上托管 WCF 服务
【发布时间】:2014-08-31 09:12:03
【问题描述】:

有没有办法在 Linux 上托管 WCF 服务。 我阅读了有关 wine 的信息,但没有看到任何使用它托管 WCF 服务的示例。

P.S : 我尝试过 mono 和 mod_mono 但无济于事。

【问题讨论】:

  • “无济于事”不是描述您在 * 中的问题的正确方式,请解释您在尝试 mono 和 mod_mono 时遇到的问题。
  • Wine 将无法为您提供服务,因为 Windows 版本的 WCF 与 IIS 挂钩很多,这是不可能通过 Wine 移植的。查看@Thinkster 的答案并将您的 WCF 定制为 Mono 可以支持的最简单且受支持的模式。然后,您可以在 Linux 上托管它。当然,如果您想要一流的支持,建议切换到 ASP.NET Web API。

标签: wcf mono centos wine mod-mono


【解决方案1】:

您可以将其托管在独立的控制台应用程序中,如下所示:

using System;
using System.ServiceModel;
using Service;

namespace Host
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("WCF Host!");
            var binding = new BasicHttpBinding ();
            var address = new Uri ("http://localhost:8080");
            var host = new ServiceHost (typeof(GreeterWcfService));
            host.AddServiceEndpoint (
                typeof(IGreeterWcfService), binding, address);
            host.Open ();

            Console.WriteLine ("Type [Enter] to stop...");
            Console.ReadLine ();
            host.Close ();
        }
    }
}

GreeterWcfService 是 WCF 服务类本身,IGreeterWcfService 是服务契约。

Full working example solution in GitHub - 为服务、托管和客户端提供单独的项目。看看吧。

【讨论】:

    【解决方案2】:

    这是可能的,但您应该参考此链接以了解当前状态和已知问题 - http://www.mono-project.com/docs/web/wcf/。现在是有限的。例如。如果你想使用 WSHttpBinding 它目前不支持。

    【讨论】: