在Linux上托管WCF服务

9
有没有在Linux上托管WCF服务的方法?我读过关于wine的文章,但没有看到任何使用它托管WCF服务的示例。 附注:我尝试过mono和mod_mono,但都没有成功。

2
在stackoverflow上,“to no avail”不是描述您问题的正确方式,请解释一下您尝试使用mono和mod_mono时遇到的问题。 - knocte
Wine无法为您提供服务,因为Windows版本的WCF与IIS挂钩很多,这是不可能通过Wine进行移植的。请查看@Thinkster的答案,并将您的WCF定制为最简单和支持的模式,以便Mono可以支持。然后您就可以在Linux上托管它了。当然,如果您想要一流的支持,建议切换到ASP.NET Web API。 - Lex Li
2个回答

21

您可以像这样在独立的控制台应用程序中托管它:

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则是服务契约。

完整的工作示例解决方案在GitHub中 - 包括服务、托管和客户端三个独立项目。可以去查看一下。


2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接