我目前正在开发一个项目并尝试了解 WCF Web 服务。
我有一个托管 WCF 服务的控制台应用程序。我已经在 <baseAddress>
中添加了应该可以访问的 URL App.config 文件的部分。当我在 Visual Studio 中以 Debug模式运行控制台应用程序时,我收到一个弹出窗口,显示 your services have been hosted
.
如果我在 Visual Studio 之外运行我的应用程序并转到无法连接的 URL,我猜我需要进行一些配置才能使其正常工作,但找不到我需要执行的操作。
我有两个问题,如何使用 IIS for Windows 通过 http://访问控制台应用程序中托管的 WCF 服务,并使用 Mono C# 和 Apache Web 服务器使其可用。
感谢您提供的任何帮助。
最佳答案
在 IIS 中托管 - 用于测试
要在 IIS 中托管该服务,您需要创建一个虚拟目录。有两种方法可以做到这一点:
为了方便测试:
- 在 Visual Studio 中右键单击您的 WCF 服务项目,选择“属性”/“Web”
- 在其中选择“使用本地 IIS Web 服务器”。
- 请勿启用“使用 IIS Express”。
- 项目 URL 是您的服务器在网络上可见的地址,即。
http://yourhost/somepath/
- 点击“创建虚拟目录”(您可能需要以管理员身份运行 Visual Studio,但这一步只需执行一次,日常使用不需要管理员权限)。
之后,您的虚拟目录已设置完毕,IIS 会将所有对 http://yourhost/somepath
的请求定向到您的 WCF 服务。请注意,这将指向项目目录中 Visual Studio 生成的二进制文件,因此重建将自动进行。
这是最简单的开发和测试选项,您甚至不需要打开 Visual Studio,但您所做的任何更改都会自动反射(reflect)到已部署的实例。
在 IIS 中托管 - 用于生产
对于生产环境,您需要创建一个真实的虚拟目录。为此:
- 创建一个用于托管服务的目录,例如“C:\inetpub\yoursite\yourservice\”,这可以是文件系统上的任何目录。
- 将您的 Web 服务复制到此目录中(Visual Studio 有某种方法可以自动执行此操作,但我从未使用过它,所以不太知道它是如何工作的)。
- 打开“Internet 信息服务 (IIS) 管理器”(需要以管理员身份运行)
- 在左侧 Pane 中,您将看到已配置的 IIS 实例和站点。如果您第一次运行此程序并且左侧 Pane 为空(应该有一个默认站点),只需右键单击并选择“添加网站”即可。
- 右键单击您的网站,选择“添加虚拟目录”。别名是新目录的可见名称,例如
http://yoursite/alias/
,物理路径仅指向您部署服务的目录。
自托管
您的控制台应用程序称为自托管。如果这在 Visual Studio 之外不起作用,则通常是您的 app.config
有问题。我有一个简单的例子here .
使用 Mono 托管
对于 Mono,您有三个选择:
- 自托管
- Apache 与 mod-mono 用于生产
- 带有 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
并指定任意目录,例如当前用于测试。
关于c# - 控制台托管 WCF 服务 Http 可在 mono 和 IIS 下访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542013/