web-dev-qa-db-ja.com

ServiceHostは、クラスサービスタイプのみをサポートします

パブリックインターフェイスを備えたIService.csファイルを持つWcfService2(元の私が知っている)という名前のサービスがあります。

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

次に、次のような値の文字列を返すパブリッククラスService1.svc.csファイルがあります。

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

私は今、次のようなコンソールアプリでこのサービスをホストしようとしています:

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();
        }
    }
}

しかし、実行するとエラーが発生します。

ServiceHostは、クラスサービスタイプのみをサポートします。

したがって、これは明らかに私のIServiceがパブリックインターフェイスタイプであることに関連しています。しかし、他に作成する方法がわかりません。最初にWCF Service applicationを作成したとき、またはを削除すると2つの標準ファイルIServiceファイルとService.svcファイルが表示され、このソリューションを1つのクラスに実装するだけです。ローカルの魂にWebサービスを追加するために何も見つかりません。

ホストコードをいじる方法はありますか?

14
G Gr

これを変更することをお勧めします:

WebServiceHost Host = new WebServiceHost(typeof(IService1));

これに:

WebServiceHost Host = new WebServiceHost(typeof(Service1));
29

サービスを実装するクラスを使用してWebServiceHostを作成する必要があります。

WebServiceHost Host = new WebServiceHost(typeof(Service1));

例として ここ を読んでください。

4