セルフホストサービスを使用して、wcfエンドポイントURIでサービス操作を呼び出すことは可能ですか?
クライアントがサービスのエンドポイントURIに入るときに、デフォルトのサービス操作を呼び出したい。
次のサンプルでは、これらのURIは宣言された操作(SayHello、SayHi)を正しく呼び出します。
- http://localhost:4711/clerk/hello
- http://localhost:4711/clerk/hi
しかし、URI
- http://localhost:4711/clerk
宣言されたSayWelcome操作を呼び出しません。代わりに、よく知られている「メタデータ発行の無効化」ページが表示されます。mexを有効にしても効果はありません。この場合、mexページはエンドポイントURIに表示されます。
private void StartSampleServiceHost()
{
ServiceHost serviceHost = new ServiceHost(typeof(Clerk), new Uri( "http://localhost:4711/clerk/"));
ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint(typeof(IClerk), new WebHttpBinding(), "");
endpoint.Behaviors.Add(new WebHttpBehavior());
serviceHost.Open();
}
[ServiceContract]
public interface IClerk
{
[OperationContract, WebGet(UriTemplate = "")]
Stream SayWelcome();
[OperationContract, WebGet(UriTemplate = "/hello/")]
Stream SayHello();
[OperationContract, WebGet(UriTemplate = "/hi/")]
Stream SayHi();
}
public class Clerk : IClerk
{
public Stream SayWelcome() { return Say("welcome"); }
public Stream SayHello() { return Say("hello"); }
public Stream SayHi() { return Say("hi"); }
private Stream Say(string what)
{
string page = @"<html><body>" + what + "</body></html>";
return new MemoryStream(Encoding.UTF8.GetBytes(page));
}
}
mex処理を無効にし、代わりに宣言された操作を有効にする方法はありますか?
よろしくお願いします、ディーター