如何将方法绑定到自托管WCF Web服务的根目录?

时间:2017-07-20 13:45:15

标签: c# web-services wcf

当请求的URL是主机的根目录时,我想从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.2 Add()并按预期返回结果,但当我浏览http://localhost/时,RootMehtod()未执行,而是收到一条消息我

  

此服务的元数据发布目前已停用。

如何将方法绑定到自托管WCF Web服务的根目录?

1 个答案:

答案 0 :(得分: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以获取更多详细信息,希望这会有所帮助!