WCF REST服务托管在Console Application最小示例中

时间:2015-12-03 13:05:13

标签: c# wcf rest

我刚开始使用WCF并尝试创建一个小型REST HTTP服务。 如果它托管在IIS中,它可以正常工作。但是现在我正试图主持它 在控制台应用程序中。我已经完成了几个教程,但无法让它工作。

我的猜测是,在Program.cs中这是一个相当简单的错误,因为如果它在IIS中托管,同样的服务也可以工作。

如果我尝试访问http://localhost:8080/Products/,我会收到一个没有找到端点的网页。

Program.cs的

Uri baseAddress = new Uri("http://localhost:8080/");

// Create the ServiceHost.
using (WebServiceHost host = new WebServiceHost(typeof(ProductRESTService), baseAddress))
{
     host.Open();

     Console.WriteLine("The service is ready at {0}", baseAddress);
     Console.WriteLine("Press <Enter> to stop the service.");                 
     Console.ReadLine();

     // Close the ServiceHost.
     host.Close();
}

IProductRestService.cs

[ServiceContract]
public interface IProductRESTService
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "http://localhost:8080/Products/")]
    List<Product> getProductList();

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "http://localhost:8080/Product/{id}/")]
    Product getProduct(string id);
}

ProductRestService.cs

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class ProductRESTService : IProductRESTService
{
    public Product getProduct(string id)
    {
        return Products.Instance.GetProduct(Convert.ToInt32(id));
    }

    public List<Product> getProductList()
    {
        return Products.Instance.ProductList;
    }
}

产品和产品类在http://pastebin.com/FRFxsWBU,但我怀疑它们是否相关。

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我自己找到了解决方案。错误实在是相当愚蠢:在IProductRestService.cs中,UriTemplates应该是模板而不是URI本身。

现在我有了这个:

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/Products/")]
    List <Product> getProductList();

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/Product/{id}/")]
    Product getProduct(string id);

它按预期工作。