我一直在尝试创建一个简单的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采取行动? 在此先感谢:)
编辑:我找到了答案。
事实证明必须定义 Routings ......
将此添加到Global.asax后:
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("MyService",
new WebServiceHostFactory(), typeof(MyService)));
}
它经历了很好。
另外,我认为“.svc”现在不属于URL。
答案 0 :(得分:1)
您的代码对我来说很好。你可以尝试几件事吗
[OperationContract]
[WebGet(UriTemplate = "/Login/{username}/{password}", ResponseFormat = WebMessageFormat.Xml)]
Guid Login(string username, string password);
同时请从MyService.Login函数中删除WebGet属性。
-OR -
将此块放在system.web
下的web.config中<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
希望这有帮助。
答案 1 :(得分:1)
我有同样的问题 原因是我的帖子xml上面有以下
<?xml version="1.0" encoding="utf-16"?>
我删除它,它只是工作!