WCF 休息 WebInvoke 获取方法不起作用返回 404 错误

Posted

技术标签:

【中文标题】WCF 休息 WebInvoke 获取方法不起作用返回 404 错误【英文标题】:WCF rest WebInvoke get method not working returning 404 error 【发布时间】:2019-12-22 00:28:01 【问题描述】:

我使用默认方法创建了一个基本的 WCF REST 服务。 当我请求 svc 文件时它正在工作,但是在发出带有其余参数的请求时它返回 404 错误。 即当我调用 http://localhost/FirstWCFRestApp/RestServiceImpl.svc 时它会给出响应,但当我调用 http://localhost/FirstWCFRestApp/RestServiceImpl.svc/xml/12 时返回 404 错误。

这是非常基本的服务,只有一种方法,让我很困惑为什么它不起作用。 我已经粘贴了下面的代码。

请告诉我哪里出了问题以及为什么它不起作用。

界面`

using System.ServiceModel;
using System.ServiceModel.Web;

namespace FirstWCFRestApp

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IRestServiceImpl" in both code and config file together.
    [ServiceContract]
    public interface IRestServiceImpl
    
        [OperationContract]
        [WebInvoke(Method="Get",UriTemplate="/xml/id",RequestFormat=WebMessageFormat.Json,
            ResponseFormat=WebMessageFormat.Json)]
        string DoWork(string id);


    

类文件`

namespace FirstWCFRestApp

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "RestServiceImpl" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select RestServiceImpl.svc or RestServiceImpl.svc.cs at the Solution Explorer and start debugging.
    public class RestServiceImpl : IRestServiceImpl
          

        public string DoWork(string id)
        
            return "You requested Id is "+ id;
        


    

SVC 文件

<%@ ServiceHost Language="C#" Debug="true" Service="FirstWCFRestApp.RestServiceImpl" CodeBehind="RestServiceImpl.svc.cs" %>

Web.Config

<?xml version="1.0"?>
<configuration>



  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>


    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <behaviors>
      <endpointBehaviors>
        <behavior name="FWRBehaviour">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>

        <behavior name="htBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="FirstWCFRestApp.RestServiceImpl" behaviorConfiguration="htBehaviour">
        <endpoint address="Stud" binding="webHttpBinding"
                  contract="FirstWCFRestApp.IRestServiceImpl" behaviorConfiguration="FWRBehaviour"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
  </system.serviceModel>

  <system.webServer>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

【问题讨论】:

【参考方案1】:

就像亚伯拉罕说的:

网页调用格式:SVC Path/webHttpBinding Endpoint Address/WebInvoke UriTemplate

在你的情况下,它应该是:

http://localhost/FirstWCFRestApp/RestServiceImpl.svc/Stud/xml/12

【讨论】:

【参考方案2】:

地址http://localhost/FirstWCFRestApp/RestServiceImpl.svc是服务元数据地址。 实际的服务地址应该基于服务地址的 UriTemplate 属性和 Address 属性。

UriTemplate="/xml/id"

binding="webHttpBinding" contract="FirstWCFRestApp.IRestServiceImpl" >behaviorConfiguration="FWRBehaviour">

另外,WebInvoke 的 Method 属性应该大写。

[WebInvoke(Method ="GET",ResponseFormat =WebMessageFormat.Json,UriTemplate ="/xml/id")]

综上所述,服务地址应该是,

http://localhost/FirstWCFRestApp/RestServiceImpl.svc/Stud/xml/12

如果有什么我可以帮忙的,请随时告诉我。

【讨论】:

以上是关于WCF 休息 WebInvoke 获取方法不起作用返回 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

WCF 休息 | URL 参数不起作用 GetProduct/productid/format

为啥 WCF 休息服务(不是使用 WCF 休息服务模板创建的)不起作用?

删除不工作在 WCF 休息服务抛出 (405) 方法不允许

调用 wcf 休息服务并以 xml 或 json 格式返回数据

未找到 WCF 休息方法/操作 - 一切似乎都已正确配置

WCF 休息服务不返回 JSON 数据。但它适用于 XML