我刚开始使用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,但我怀疑它们是否相关。
谢谢!
答案 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);
它按预期工作。