这个wcf休息实现有什么问题?

时间:2016-10-12 23:55:59

标签: c# .net ajax rest wcf

我有一个wcf休息服务方法。 OperationContract看起来像这样:

[OperationContract]
[WebGet(UriTemplate = "?maps/reporttypes/{reportType}/reportperiods/{reportPeriod}", ResponseFormat=WebMessageFormat.Json)]
Map GetData(int reportType, int reportPeriod);

我可以使用WCF测试客户端成功测试,因此我知道基础方法有效。但是,我在使用$ .ajax()方法获取数据时遇到问题:

$.ajax({    
    url: 'http://localhost:52672/Service1.svc?maps/reporttypes/1/reportperiods/1',
    success:function(data){
       //bind data here
    },
    error:function(error){
    }
});

上面的ajax方法返回成功,但是如果选择"在浏览器中查看"数据值只是显示页面的html。为了服务。知道我在这个实现中可能缺少什么吗?

2 个答案:

答案 0 :(得分:0)

web.config需要更新才能休息。本文提供了一个很好的参考:

http://www.topwcftutorials.net/2013/09/simple-steps-for-restful-service.html

答案 1 :(得分:0)

正如您已经发现的那样,您的配置存在根本问题。 要使用宁静的WCF服务,您需要webHttpBinding而不是您使用的basicHttpBinding

这个<system.serviceModel> - 节点:

的工作配置示例
<system.serviceModel>
  <services>
    <service behaviorConfiguration="Default" name="MapService5.Service1">
      <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="MapService5.IService1" />
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="Default">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

通过完成更改,您已经可以直接通过浏览器调用该方法:

enter image description here

下一个错误原因是您提到的错误使用的问号。您试图像这样调用方法:

http://localhost:52672/Service1.svc?maps/reporttypes/1/reportperiods/1

然而必须像这样调用它:

http://localhost:52672/Service1.svc/maps/reporttypes/1/reportperiods/1

请在/之后注意斜杠Service1.svc)。

如果您使用问号(?),则字符串的其余部分(?maps/reporttypes/1/reportperiods/1)将被视为查询字符串,这不是您的意思在你的情况下寻找。你需要一个没有任何查询参数的简单GET,这可以通过使用上面的后一个链接来实现。

UriTemplate必须恢复到之前的字符串。再次问号与斜线问题;)

[WebGet(UriTemplate = "/maps/reporttypes/{reportType}/reportperiods/{reportPeriod}", ResponseFormat=WebMessageFormat.Json)]