パブリックインターフェイスを備えた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サービスを追加するために何も見つかりません。
ホストコードをいじる方法はありますか?
これを変更することをお勧めします:
WebServiceHost Host = new WebServiceHost(typeof(IService1));
これに:
WebServiceHost Host = new WebServiceHost(typeof(Service1));
サービスを実装するクラスを使用してWebServiceHostを作成する必要があります。
WebServiceHost Host = new WebServiceHost(typeof(Service1));
例として ここ を読んでください。