C# 将WebServiceHost转换为WCF服务应用程序
我有一个工作控制台应用程序,其中所有的地址和配置都在一个配置文件中。但是,当我尝试将此代码移动到WCF服务应用程序时,会出现各种错误C# 将WebServiceHost转换为WCF服务应用程序,c#,wcf,web-services,webservicehost,C#,Wcf,Web Services,Webservicehost,我有一个工作控制台应用程序,其中所有的地址和配置都在一个配置文件中。但是,当我尝试将此代码移动到WCF服务应用程序时,会出现各种错误 class Program { static void Main(string[] args) { WebServiceHost host = new WebServiceHost(typeof(ImageService)); host.Open(); Console.WriteLine("Ser
class Program
{
static void Main(string[] args)
{
WebServiceHost host = new WebServiceHost(typeof(ImageService));
host.Open();
Console.WriteLine("Service up");
Console.ReadLine();
host.Close();
}
}
问题是WCF服务应用程序会自动启动,并且没有像控制台应用程序那样的主方法。当不存在主方法时,如何定义WCF服务来启动WebServiceHost 您必须通过继承
ServiceBase
类来创建自己的服务。重写OnStart()
方法,并在实现中打开WCF服务。覆盖OnStop()
方法,并在实现中关闭WCF服务。我找到了一个非常简单的解决方案。为了告诉WCF改用webservice,只需将其添加到.svc文件中即可
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
不知何故,我无法在Visual Studio中打开此文件,因此我导航到项目文件夹并使用记事本打开它。我的service.svc文件如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="MyNamespace.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
这是如何做到的?在上面的示例中,我尝试从ServiceBase继承并使用OnStart()重写,但必须添加更多内容,OnStart()方法永远不会被调用创建服务实例并调用OnStart(),您现在有什么样的项目?创建实例吗?不,我希望WCF托管在IIS上,因此我无法创建我的服务实例并调用它。当没有主方法时,我应该如何创建一些东西?我的项目将WCF服务连接到azure服务总线。当使用控制台应用程序(与WebServiceHost一起)和相同的配置时,一切正常。但是,当使用WCF(相同的配置设置)时,我会得到“EndpointDispatcher上的AddressFilter不匹配”是否要自托管此WCF服务?当你说你的项目连接到Azure服务总线时,它是什么。您是否正在尝试对内部调用Azure服务总线的WCF服务执行调用?我正在尝试设置一个可以使用REST从Azure服务总线中继调用的服务。这适用于上面初始化的服务。当然,我不想使用我现在正在使用的控制台应用程序,所以我想将其转换为托管在IIS上的WCF服务。