IIS:使用https和GET的WCF服务 - > HTTP 400错误

时间:2015-06-01 14:24:28

标签: c# wcf iis https get

我正在尝试为https绑定创建WCF服务。该服务之前正在使用http。我更改了绑定(带证书),现在我配置了web.config - 但我总是收到错误代码“400 - Bad Request”。

通过以下方式调用Web服务: https://servername:444/FolderService.svc/FolderExists/1234 https://servername:444/FolderService.svc/Test

这是我的服务界面:

[ServiceContract]
public interface IFolderService
{
    [OperationContract]
    [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/FolderExists/{accountnumber}")]
    bool FolderExists(string accountnumber);

    [OperationContract]
    [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/Test")]
    string Test();
}

这是我的web.config:

<?xml version="1.0"?>
<configuration>

  <system.serviceModel>
    <services>
      <service name="myService.FolderService">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="secureHttpBinding"
                  contract="myService.IFolderService"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="secureHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

我尝试了很多不同的配置而没有成功。有没有人有想法(或一个工作实例)?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您正尝试通过URL以RESTful方式访问您的方法。但是,web.config中的错误在于您使用的是BasicHttpBinding,它用于SOAP Web服务而不是RESTful Web服务。

WebGetWebInvoke是您已经完成的添加到操作中的必要属性。

但是,端点的正确绑定是WebHttpBinding,并且您需要应用于端点的行为是WebHttpBehavior

示例缩略配置:

<service> 
    <endpoint behaviorConfiguration="webBehavior" 
              binding="webHttpBinding" 
              contract="myService.IFolderService" 
              bindingConfiguration="secureHttpBinding" /> 
</service> 

<endpointBehaviors> 
    <behavior name="webBehavior"> 
        <webHttp /> 
    </behavior> 
</endpointBehaviors>