如何在VS2017中将我的WCF服务更改为RESTful服务?

时间:2017-07-08 12:07:08

标签: c# rest wcf wcf-rest

我正在使用Visual Studio 2017,我写了一个小WCF Service Application (Visual C#)

现在我正在努力使其成为RESTful,以便我可以在我的网络浏览器中访问成员函数。

这是我的IService1.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService {
    [ServiceContract]
    public interface IService1 {

        [OperationContract]
        [WebGet(UriTemplate="/getdata",RequestFormat =WebMessageFormat.Xml,ResponseFormat =WebMessageFormat.Xml,BodyStyle =WebMessageBodyStyle.Bare)]
        //[WebGet]
        string GetData();
    }


}

这是我的Web.config文件:

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

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <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>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

按下F5后,我访问了Edge中的http://localhost:52110/Service1.svc/getdata,但我得到的是http 400

那么,如何通过http请求访问我的服务?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可能希望按以下方式检查配置中的绑定信息:

<system.serviceModel>
   <services>
        <service name="WcfService.Service1" behaviorConfiguration="serviceBehavior">
                <endpoint address=""
                          binding="webHttpBinding"
                          contract="WcfService.IService1"
                          behaviorConfiguration="web"></endpoint>
          </service>
   </services>
   <behaviors>
          <serviceBehaviors>
              <behavior name="serviceBehavior">
                  <serviceMetadata httpGetEnabled="true"/>
                       <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
              <behavior name="web">
                    <webHttp/>
               </behavior>
          </endpointBehaviors>
  </behaviors>
   <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

您也可以通过编程方式执行上述操作。