我一直在尝试创建一个简单的 WCF RESTful Web 服务,但它似乎只能在 SOAP 模式下工作。我正在使用本地 IIS 托管我的服务。
它看起来很标准:
[ServiceContract]
public interface IMyService
{
[OperationContract]
Guid Login(string username, string password);
...
和:
public class MyService : IMyService
{
[WebGet(UriTemplate = "login?user={user}&password={password}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
public Guid Login(string username, string password)
{
return Guid.Empty;
}
我还在配置文件中包含了该行为,并在以下位置使用它:
<endpoint address="" binding="webHttpBinding" contract="MyService" behaviorConfiguration="webHttp"/>
根据我知道的所有例子......
现在的问题是,当从使用 ServiceReference 的存根客户端调用登录时,它在 Fiddler 中看起来很好,但它是 SOAPy。由于某种原因,我无法以 RESTy 方式调用我的服务,即使 /help 似乎也返回了 400 Bad Request。(我正在调用http://localhost:8080/MyService.svc/help或 /login 等)
是什么阻止了 REST 采取行动?提前致谢 :)
编辑:我找到了答案。
事实证明,必须定义路由......
将此添加到 Global.asax 后:
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("MyService",
new WebServiceHostFactory(), typeof(MyService)));
}
它通过就好了。
另外,我发现“.svc”现在不是 URL 的一部分。