我对WCF了解不多。但我有一个非常基本的服务,我正在尝试执行。我的服务代码如下所示:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(IncludeExceptionDetailInFaults = false)]
[ServiceContract]
public class MyService
{
[OperationContract]
[WebGet(UriTemplate = "/IsValidRequest")]
public bool IsValidRequest()
{
return true;
}
}
像我说的那样,这是一项非常基本的服务。当我在浏览器中输入“http:// localhost:[port] /MyService.svc”时,我会看到服务描述页面。但是,“IsValidRequest”没有像我想象的那样列出(也许这只发生在.asmx中)。无论哪种方式,当我在我的浏览器中输入“http:// localhost:[port] /MyService.svc/IsValidRequest”时,不会返回任何内容。在Fiddler中,我看到我收到HTTP 400错误。但是,没有什么可以让我对问题的解决方法有所了解。
有人可以帮助我并指出正确的方向吗?谢谢!
答案 0 :(得分:4)
使用以下配置(更改名称空间以匹配您的代码)
<services>
<service name="WcfService1.MyService" behaviorConfiguration="GetBehavior">
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="WebBehavior" contract="WcfService1.MyService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="GetBehavior">
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true"/>
您的.svc文件应如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.MyService" CodeBehind="MyService.svc.cs" %>
答案 1 :(得分:1)
查看消息的WSDL是无关紧要的,因为正如您在对注释的响应中所说,您希望这是一个基于REST的服务,而WSDL是一个SOAP构造。在此基础上,如果您有一个<serviceMetadata>
行为,则应删除该行为,因为这与SOAP元数据有关。
要诊断此类问题,您应该在WCF中打开跟踪(我有一个简短的截屏视频here,告诉您如何操作)。这应该突出显示处理消息时的问题
要在不添加服务配置中的部分的情况下连接REST管道,请将以下内容添加到system.serviceModel部分下的配置文件中
<protocolMapping>
<add scheme="http" binding="webHttpBinding"/>
</protocolMapping>
<behaviors>
<endpointBehaviors>
<behavior>
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>