WCF服务使用WebGet时返回400错误

时间:2011-01-03 21:07:20

标签: c# wcf

我对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错误。但是,没有什么可以让我对问题的解决方法有所了解。

有人可以帮助我并指出正确的方向吗?谢谢!

2 个答案:

答案 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" %>

enter image description here

答案 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>