ServiceHost仅支持类服务类型

G G*_* Gr 14 .net c# wcf exception-handling wcf-rest

我有一个名为WcfService2(原件我知道)的服务,它有一个带有公共接口的IService.cs文件:

namespace WcfService2
{
    [ServiceContract]
    public interface IService1
    {    
        [OperationContract]
        [WebGet(UriTemplate = "/{value}")]
        string GetData(string value);            
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有我的公共类Service1.svc.cs文件,它返回一个值的字符串,如下所示:

namespace WcfService2
{
    public class Service1 : IService1
    {
        public string GetData(string value)
        {
            return string.Format("You entered: {0}", value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在正尝试使用如下控制台应用程序来托管此服务:

namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
            WebHttpBinding binding = new WebHttpBinding();
            WebServiceHost host =
            new WebServiceHost(typeof(IService1));
            host.AddServiceEndpoint(typeof(IService1),
            binding,
            "http://localhost:8000/Hello");
            host.Open();
            Console.WriteLine("I DONT LIKE REST!");
            Console.WriteLine("Press <RETURN> to KILL REST FOR GOOD");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但运行后我收到错误:

ServiceHost仅支持类服务类型.

所以这显然与我的IService是公共接口类型有关.但我不知道如何创建它,当我第一次创建它时,WCF Service application它会为您提供两个标准文件IService和Service.svc文件,如果我删除或者,并且只在我尝试添加Web服务时在一个类中实现此解决方案在当地的灵魂中找不到任何东西.

有没有办法摆弄主机代码?

Wil*_*ler 30

我建议你改变这个:

WebServiceHost host = new WebServiceHost(typeof(IService1));
Run Code Online (Sandbox Code Playgroud)

对此:

WebServiceHost host = new WebServiceHost(typeof(Service1));
Run Code Online (Sandbox Code Playgroud)

  • 任何阅读此答案的人也请参阅:http://stackoverflow.com/questions/9864006/servicecontractattribute-error-on-simple-wcf-service因为WebServiceHost是Service1而AddServiceEndpoint是IService1! (4认同)
  • 如果我这样做,我会收到此错误:`合同类型WcfService2.Service1未归属于ServiceContractAttribute.为了定义有效的合同,必须使用ServiceContractAttribute来指定指定的类型(合同接口或服务类). (2认同)