在WCF服务中公开webHttpBinding端点

我创建了一个WCF服务并公开了三个端点,即basicHttpBinding,wsHttpBinding和webHttpBinding。 这是我使用WCF进行实验的测试服务。 但是,每当我使用.svc文件添加服务引用时,我只获得两个(基本和ws)端点。 由于某种原因,似乎没有第三个(webHttpBidning)端点被暴露。

要重现此问题,请创建WCF应用程序项目,删除Service1服务,添加新项目>名为TestService的WCF服务,并将配置文件更改为以下内容:

                          

以下是ITestService.cs的代码:

 [ServiceContract] public interface ITestService { [OperationContract] [WebInvoke] Boolean ValidateUser(User user); } [DataContract] public class User { [DataMember(Name = "Name")] public String UserName { get; set; } [DataMember] public String Password { get; set; } } 

并为TestService.svc

 public class TestService : ITestService { public bool ValidateUser(User user) { if (user.UserName == "User" && user.Password == "123") { return true; } return false; } } 

我尝试了WebInvoke参数和WebGet参数的不同组合,但都失败了。

任何人都可以告诉我为什么第三个端点没有出现在WSDL文件中?

@decyclone:我已经成功地公开了webHttpBindings而没有任何问题。 但是当它暴露出来时我发现了一些有趣的东西,当它没有暴露时!

我可以看到Web绑定在Wcf Test Client中暴露出来。

这是我的配置

             

这里要注意的是,它的工作正常使用VS2008与Framework 3.5,VS2010与Framework 3.5,当我使用VS2010和Framework 4.0然后我看不到WebHttpBinding在WCF测试客户端中暴露,但是我可以使用那个binidng来做http在所有情况下发布。

我假设在Framework 4.0中它默认不可见,即使我尝试启用endpointDiscovery但仍然没有运气!

我在post中介绍了这种行为

您的“Web”端点将作为JSON端点公开。 它与WSDL不兼容。

WebHttpBinding位于System.ServiceModel.Web中。 如果您使用的是vs2010,请转到项目的属性,检查目标框架。 默认情况下,它指向.Net Framework 4 Client Profile。 它应该指向.Net Framework 4,然后您可以在添加引用时找到System.ServiceModel.Web

@decyclone:javascript客户端可以在webHttpBinding上学习可用方法的一种方法是下载一个WCF javascript代理,其中HTML脚本标记指向您的端点,后跟“/ js”: