我创建了一个WCF服务并公开了两个端点;一个用于SOAP,一个用于REST。 SOAP端点可以工作,可以从Web客户端,控制台应用程序等访问.REST端点是在今天早上创建的,不起作用。我确认SOAP服务仍然可以访问,因此这个问题特定于今天早上的REST部分或配置更改。
在浏览器中,我尝试导航到http://ABC:99/json/categories
。我得到了404 - 文件或目录未找到。
我将以下属性添加到实现服务接口的类中的方法:
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "categories")]
这是另一种方法:
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "reports/{categoryId}")]
配置文件的相关部分在这里:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="NewBinding0" maxBufferSize="524288" maxReceivedMessageSize="524288" transferMode="StreamedResponse"
closeTimeout="00:10:00" openTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00" />
</basicHttpBinding>
</bindings>
<services>
<service name="XXX.ReportGenerator">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"
contract="XXX.YYY.IReportGenerator">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<service name="ReportingSvc.JSON">
<endpoint address="json" binding="webHttpBinding"
contract="XXX.YYY.ReportingSvc.IReportGenerator" behaviorConfiguration="jsonEndpoint" />
<host>
<baseAddresses>
<add baseAddress="http://ABC:99/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="jsonEndpoint">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="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="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
非常感谢任何建议!谢谢!
答案 0 :(得分:0)
我无法在WCF中为您提供有关REST服务的具体帮助,因为我没有经验,但WCF Tracing在过去的多个实例中一直是我的救星。只需按照说明将以下内容添加到WCF服务的web.config:
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
显然,您必须根据需要更改日志的路径,并确保在您设置的文件夹上设置了正确的权限,但基本上就是这样。跟踪开始记录后,您可以使用我认为默认安装的Service Trace Viewer来查看跟踪,看看是否无法查明问题的根源。
修改
请注意,服务跟踪是超级资源密集型的,因此只有在您需要它来调试问题时再将其打开,然后在您不再需要它时将其关闭。
答案 1 :(得分:0)
如果您的方法仅用于执行GET操作,则最好使用WebGet属性而不是使用WebInvoke并将方法指定为GET。
第一种方法的服务网址如下:
http://ABC:99/categories/json
第二种方法的网址是
http://ABC:99/reports/5/json
这是因为您将地址定义为“json”作为您的端点地址,该地址将附加到基本URL +资源URL +端点地址。