Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WebServiceHost转换为WCF服务应用程序_C#_Wcf_Web Services_Webservicehost - Fatal编程技术网

C# 将WebServiceHost转换为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

我有一个工作控制台应用程序,其中所有的地址和配置都在一个配置文件中。但是,当我尝试将此代码移动到WCF服务应用程序时,会出现各种错误

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服务。