2

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

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

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

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

感谢您的任何帮助,您可以提供。

4

2 回答 2

2

在 IIS 中托管 - 用于测试

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

为了方便测试:

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

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

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

在 IIS 中托管 - 用于生产

对于生产,您需要创建一个真实的虚拟目录。要做到这一点:

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

自托管

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

使用 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 运行它。

有关如何使用 mod-mono 设置 apache 的信息,请参阅无法使用 mod-mono 访问托管在 Apache 中的 WCF 服务,包括一些示例。

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

于 2012-11-26T19:17:24.267 回答
0

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

于 2012-11-26T16:09:55.297 回答