未找到 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 - 未找到 请求的内容似乎是脚本,不会由静态文件处理程序提供