C# 托管WCF服务Http的控制台可在mono和IIS下访问

C# 托管WCF服务Http的控制台可在mono和IIS下访问,c#,wcf,apache,iis,mono,C#,Wcf,Apache,Iis,Mono,我目前正在从事一个项目,并试图了解WCF web服务 我有一个托管WCF服务的控制台应用程序。我已经在App.config文件的部分添加了可以访问的URL。当我在VisualStudio中以调试模式运行控制台应用程序时,会出现一个弹出窗口,显示您的服务已托管 如果我在visual studio之外运行我的应用程序,然后转到无法连接的URL,我猜我需要进行一些配置以使其正常工作,但找不到需要执行的操作 我有两个问题,如何让托管在console应用程序中的WCF服务通过http://usingIIS

我目前正在从事一个项目,并试图了解WCF web服务

我有一个托管WCF服务的控制台应用程序。我已经在App.config文件的部分添加了可以访问的URL。当我在VisualStudio中以调试模式运行控制台应用程序时,会出现一个弹出窗口,显示您的服务已托管

如果我在visual studio之外运行我的应用程序,然后转到无法连接的URL,我猜我需要进行一些配置以使其正常工作,但找不到需要执行的操作

我有两个问题,如何让托管在console应用程序中的WCF服务通过http://usingIIS for Windows访问,以及如何使用MonoC和ApacheWeb服务器使其可用


谢谢你能提供的帮助

您不能在IIS中托管控制台应用程序,您应该在IIS中的Wab应用程序中创建WCF Service.svc文件。IIS将运行并托管您的服务。当IIS托管您的服务时,URL是IIS中.svc文件的路径,就像web站点一样。此外,如果您使用basicHttpBinding,那么任何平台上都可以使用基于ASMX的Web服务。

在IIS中托管-用于测试

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

为了便于测试:

在Visual Studio中右键单击WCF服务项目,选择属性/Web 在其中选择使用本地IIS Web服务器。 不启用“使用IIS Express”。 Project URL是您的服务器在web上应该可见的地址,即。http://yourhost/somepath/ 单击“创建虚拟目录”,您可能需要以管理员身份运行Visual Studio,但此步骤仅需要一次,日常使用不需要管理员权限。 之后,您的虚拟目录将被设置,IIS将所有请求定向到http://yourhost/somepath 到您的WCF服务。请注意,这将指向VisualStudio在项目目录中生成的二进制文件,因此重建将自动完成

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

在IIS中托管-用于生产

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

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

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

用Mono托管

对于Mono,您有三个选项:

自托管 使用mod mono进行生产的Apache 带有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,包括一些示例

这里还有两个选项:要么将服务复制到Apache拾取的某个目录中,要么手动启动mod mono server并指定任意目录,例如当前用于测试的目录