控制台托管WCF服务Http可在单声道和IIS下访问

时间:2012-11-24 14:12:12

标签: c# wcf apache iis mono

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

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

如果我在visual studio之外运行我的应用程序并转到URL我就无法连接,我猜我需要做一些配置才能使它工作但却无法找到我需要做的事情。

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

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

在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使用当前目录进行测试
  4. 自托管意味着创建一个简单的控制台应用程序,正在做一些

    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并指定一个任意目录,例如当前用于测试的目录。 / p>

答案 1 :(得分:0)

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