我目前正在开发一个项目并尝试了解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#使其可用。
感谢您提供的任何帮助。
答案 0 :(得分:2)
在IIS中托管 - 用于测试
要在IIS中托管服务,您需要创建一个虚拟目录。有两种方法可以做到这一点:
为便于测试:
http://yourhost/somepath/
之后,您的虚拟目录已设置完毕,IIS将把http://yourhost/somepath
的所有请求定向到您的WCF服务。请注意,这将指向Visual Studio在项目目录中生成的二进制文件,因此重建将自动生成。
这是开发和测试最简单的选项,您甚至不需要打开Visual Studio,但您所做的任何更改都会自动反映到已部署的实例。
在IIS中托管 - 用于生产
对于生产,您需要创建一个真正的虚拟目录。要做到这一点:
http://yoursite/alias/
,物理路径只指向您将服务部署到的目录。<强>自托管强>
您的控制台应用程序称为自托管。如果这在Visual Studio之外不起作用,那么app.config
通常会出现问题。我有一个简单的例子here。
使用Mono主持
对于Mono,您有三种选择:
自托管意味着创建一个简单的控制台应用程序,正在做一些
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服务。