2017-07-20 12 views
0

リクエストされたURLがホストのルートである場合、Webサービスからメソッドを呼びたいと思います。自己ホスト型WCF Webサービスのルートにメソッドをバインドするにはどうすればよいですか?

[ServiceContract] 
public interface ICalculator 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/")] 
    string RootMethod(); 

    [OperationContract] 
    [WebGet] 
    double Add(double x, double y); 
} 

http://localhost/Add?x=1.1&y=2.2Add()への参照が実行され、期待通りの結果を返しますが、私はhttp://localhost/を参照するとき、RootMehtod()が代わりに実行されていない私は、私は、このサービスのための

メタデータの公開を通知するメッセージを取得しています現在無効になっています。

自己ホスト型WCF Webサービスのルートにメソッドをバインドするにはどうすればよいですか?

答えて

1

最初に表示されるエラーは、私たちのサービスがメタデータを公開するように設定していないためです。サービスのWSDLを公開するには、メタ情報を提供するようにサービスを構成する必要があります。

さて、あなたはこのようなあなたのOperationContractを更新する必要があります。

[OperationContract] 

[WebGet(UriTemplate = "")] 

注あなたは、このようなエンドポイントを公開する必要がその後UriTemplate

の違い:

 string baseAddress = "http://" + Environment.MachineName; 

     ServiceHost host = new ServiceHost(typeof(TestService), new Uri(baseAddress)); 

     ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(ITestService), new WebHttpBinding(), ""); 

     endpoint.Behaviors.Add(new WebHttpBehavior()); 

     ServiceDebugBehavior debugBehavior = host.Description.Behaviors.Find<ServiceDebugBehavior>(); 

     debugBehavior.HttpHelpPageEnabled = false; 

     debugBehavior.HttpsHelpPageEnabled = false; 

     host.Open(); 

詳細はlinkを参照してください。

+1

ありがとうございます@ankit wsdlメタデータは必要ありませんが、私が逃したのは 'debugBehavior.HttpHelpPageEnabled = false;'でした。 – Badger

関連する問題