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

Posted

技术标签:

【中文标题】未找到 WCF 休息方法/操作 - 一切似乎都已正确配置【英文标题】:WCF Rest Method/Operations not Found - Everything seems configured correctly 【发布时间】:2018-06-12 08:02:38 【问题描述】:

我在此链接之后创建了一个 WCF Rest,但它对我不起作用。 我的项目中已经有另一个标准 WCF 服务。

http://dotnetmentors.com/wcf/wcf-rest-service-to-get-or-post-json-data-and-retrieve-json-data-with-datacontract.aspx

浏览器正确显示 WSDL,但我正在尝试进行 GET 或 POST 调用,但我只得到 404。

请注意,我有 1 个 POST 和其他 GET 方法,都不起作用。

网址:http://silos:8085/KdtCustomerInterfaceRest.svc/CreateWooCommerceProduct

这是我所有的代码。

IKDTCustomerInterfaceRest.svc.cs

 [ServiceContract]
public interface IKDTCustomerInterfaceRest

    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/CreateWooCommerceProduct",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json, Method = "POST")]
    bool CreateWooCommerceProduct(string key, PriceBookEntry productItem);

    [OperationContract]
    [WebGet(UriTemplate = "/OrderId/OrderID",
        ResponseFormat = WebMessageFormat.Json)]
    string OrderId(string OrderID);

IKDTCustomerInterfaceRest.svc

public class KDTCustomerInterfaceRest : IKDTCustomerInterfaceRest
    
        [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
        public bool CreateWooCommerceProduct(string key, PriceBookEntry productItem)
        
            using (var manager = new OrderProcessing())
            
                var result = manager.UpdateWooCommerceProducts(key ,productItem);
                return result.IsSuccess;
            
        

        public string OrderId(string OrderID)
        
            return OrderID;
        

Web.Config

 <system.serviceModel>

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IKDService" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://kdwebservices9.kingdevicktest.com/KDService.svc/soap"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IKDService"
    contract="KDService.IKDService" name="BasicHttpBinding_IKDService" />
</client>
<behaviors>
  <endpointBehaviors>
    <behavior name="webBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
    <!--<behavior name="MyServiceBehavior"  returnUnknownExceptionsAsFaults="True">-->  
    <!--</behavior>-->  
  </serviceBehaviors>
</behaviors>
<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>    
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
  <service name="KdtCostumerInterface.KdtCostumerInterfaceService">
    <endpoint address="" binding="basicHttpBinding" contract="KdtCostumerInterface.IKdtCostumerInterfaceService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8085/KD.CostumerInterface.API/" />
      </baseAddresses>
    </host>
  </service>
  <service name="KdtCostumerInterface.KDTCustomerInterfaceRest">
    <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="KdtCostumerInterface.IKDTCustomerInterfaceRest" />
    <!--<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />-->
  </service>
</services>

【问题讨论】:

您在使用 http、https 或同时使用两者时是否遇到错误?另外,您是使用 localhost/IP 还是完全限定的域名访问服务?你可以发布你正在使用的网址吗? 您可以通过省略必需的参数来获得 404,也请检查它们。 只更新帖子。我给了一个别名,但它是我的本地主机。 【参考方案1】:

我对从 Web.config 中删除以下这些设置的问题进行了排序。

因为我也在本地 IIS 中运行它,而不仅仅是在 IIS express 中。 这些设置可能是 IIS 添加的。

<directoryBrowse enabled="false" />
    <handlers>
      <remove name="svc-Integrated-4.0" />
      <add name="svc-Integrated-4.0" path="*" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

我以为问题只是“”,但实际上是“...”。

【讨论】:

以上是关于未找到 WCF 休息方法/操作 - 一切似乎都已正确配置的主要内容,如果未能解决你的问题,请参考以下文章

WCF HTTP 错误 404.17 - 未找到 请求的内容似乎是脚本,不会由静态文件处理程序提供

WCF 休息 - 没有找到元素错误

具有多个合同的 Mono WCF 休息服务“配置文件中未定义端点”

WCF 休息服务 - 获得对 HTTP 响应标头的访问权限

从同一主机上的子域访问时未找到 WCF 错误

未找到 WCF 端点/不允许使用 Windows 服务的方法