0

セルフホストサービスを使用して、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処理を無効にし、代わりに宣言された操作を有効にする方法はありますか?

よろしくお願いします、ディーター

4

1 に答える 1

1

試しましたか?

[OperationContract, WebGet(UriTemplate = "/")]
Stream SayWelcome();

アップデート:

なぜ機能しないのかわかりませんが、次のサービス契約を結んでいるセルフホストのWCFサービスがあります。

[ServiceContract]
public interface IDiscoveryService {

    [OperationContract]
    [WebGet(BodyStyle=WebMessageBodyStyle.Bare, UriTemplate="")]
    Stream GetDatasets();

私が見ることができる唯一の違いは、ServiceHostの代わりにWebServiceHostを使用していることです。

于 2010-05-25T12:28:11.550 に答える