【问题标题】:Console Hosting WCF service Http accessible under mono and IIS控制台托管 WCF 服务 Http 在 mono 和 IIS 下可访问
【发布时间】:2012-11-24 14:12:11
【问题描述】:

我目前正在从事一个项目并尝试了解 WCF Web 服务。

我有一个托管 WCF 服务的控制台应用程序。我在 App.config 文件的 <baseAddress> 部分添加了应该可以访问的 URL。当我在 Visual Studio 中以调试模式运行控制台应用程序时,我收到一个弹出窗口,上面写着your services have been hosted

如果我在 Visual Studio 之外运行我的应用程序并转到我无法连接的 URL,我猜我需要进行一些配置以使其工作但找不到我需要做的事情。

我有两个问题,如何让托管在控制台应用程序中的 WCF 服务可以通过 http:// 使用 IIS 访问 Windows,并使用 Mono C# 和 Apache Web 服务器使其可用。

感谢您提供的任何帮助。

【问题讨论】:

    标签: c# wcf apache iis mono


    【解决方案1】:

    在 IIS 中托管 - 用于测试

    要在 IIS 中托管服务,您需要创建一个虚拟目录。有两种方法可以做到这一点:

    为了方便测试:

    • 在 Visual Studio 中右键单击 WCF 服务项目,选择属性/Web
    • 在其中选择“使用本地 IIS Web 服务器”。
    • 不要启用“使用 IIS Express”。
    • 项目 URL 是您的服务器应该在 Web 上可见的地址,即。 http://yourhost/somepath/
    • 点击“创建虚拟目录”(您可能需要以管理员身份运行 Visual Studio,但这一步只需要一次,日常使用不需要管理员权限)。

    之后,您的虚拟目录设置完毕,IIS 会将所有对http://yourhost/somepath 的请求定向到您的 WCF 服务。请注意,这将指向项目目录中 Visual Studio 生成的二进制文件,因此重建会自动进行。

    这是最简单的开发和测试选项,您甚至不需要打开 Visual Studio,但您所做的任何更改都会自动反映到已部署的实例中。

    在 IIS 中托管 - 用于生产

    对于生产,您需要创建一个真实的虚拟目录。为此:

    • 创建应托管服务的目录,例如 `C:\inetpub\yoursite\yourservice\',这可以是文件系统上的任何目录。
    • 将您的 Web 服务复制到此目录中(Visual Studio 有某种方法可以自动执行此操作,虽然我从未使用过,所以不知道它是如何工作的)。
    • 打开“Internet 信息服务 (IIS) 管理器”(需要以管理员身份运行)
    • 在左侧窗格中,您将配置 IIS 实例和站点。如果您是第一次运行它并且左侧窗格是空的(应该有一个默认站点),只需右键单击并选择“添加网站”。
    • 右键单击您的网站,选择“添加虚拟目录”。别名是新目录的可见名称,例如http://yoursite/alias/,物理路径仅指向您将服务部署到的目录。

    自托管

    您的控制台应用程序称为自托管。如果这在 Visual Studio 之外不起作用,那么您的 app.config 通常有问题。我有一个简单的例子here

    使用 Mono 托管

    对于 Mono,您有三个选择:

    1. 自托管
    2. 带有 mod-mono 的 Apache 用于生产
    3. 带有 mod-mono 的 Apache 使用当前目录进行测试

    自托管意味着创建一个简单的控制台应用程序来做一些事情

    var host = new System.ServiceModel.ServiceHost(typeof(MyService));
    host.Open();
    Console.WriteLine("Service running");
    foreach (var se in host.Description.Endpoints)
        Console.WriteLine(se.Address);
    Console.ReadLine();
    host.Close();
    

    并在命令行上使用 Mono 运行它。

    请参阅Cannot access WCF service hosted in Apache with mod-mono 了解如何使用 mod-mono 设置 apache,包括一些示例。

    您还有两个选择:将您的服务复制到 Apache 选择的某个目录 - 或者您也可以手动启动 mod-mono-server 并指定任意目录,例如用于测试的当前目录。

    【讨论】:

      【解决方案2】:

      您不能在 IIS 中托管控制台应用程序,您应该在 IIS 中创建 WCF 服务(Wab 应用程序中的 .svc 文件)。 IIS 将运行并托管您的服务。当 IIS 托管您的服务时,URL 是 iis 中 .svc 文件的路径(如网站)。此外,如果您使用 basicHttpBinding,它应该可以在任何使用基于 ASMX 的 Web 服务的平台上使用。

      【讨论】:

        猜你喜欢
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 2022-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        相关资源
        最近更新 更多