将WCF SOAP服务库转换为MVC的REST服务库

时间:2014-06-03 11:44:54

标签: wcf asp.net-mvc-4 rest soap

问题陈述:

我们使用WCF服务库(不是带有svc文件的WCF服务应用程序)构建了MVC 4应用程序。我们通过WCF SOAP服务库进行的所有MVC CRUD操作。一切正常。现在客户端突然改变了需求并要求我们将WCF SOAP转换为REST。

我经历了许多用于将WCF SOAP转换为REST的URL。在所有URL中,他们都提到将WCF SOAP服务应用程序转换为WCF REST而不是将WCF SOAP服务库转换为WCF REST。

我的问题是我们是否可以将SOAP中的WCF服务库转换为REST.??对于WCF服务库和WCF服务应用程序,转换是相同的。如果可能的话,它会影响太多,改变现有的代码??

如果有人能够通过一些URL和解释建议在MVC中将WCF SOAP转换为REST的更好方法,那就太棒了。

1 个答案:

答案 0 :(得分:0)

不确定它是否有帮助,但我已经完成了同时暴露给Soap和REST的WCF库。 REST公开XML / JSON,返回类型取决于输入请求。 它可以通过配置文件配置,我看起来像这样:

<behaviors>
  <serviceBehaviors>
    <behavior name="BehaviourService">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="BehaviourEndPoint"></behavior>
      <behavior name="BehaviourWebHttp">
        <webHttp defaultBodyStyle="Wrapped" faultExceptionEnabled="True" automaticFormatSelectionEnabled="True"/>
      </behavior>
  </endpointBehaviors>

</behaviors>
<services>
  <service name="NameSpace.MyClass" behaviorConfiguration="BehaviourService" >
    <!--SoapUI-->
    <endpoint name="Name" address ="soap" binding="basicHttpBinding" contract="NameSpace.IMyClass"></endpoint>
    <!--Rest-->
    <endpoint name="Name" address="" binding="webHttpBinding" behaviorConfiguration="BehaviourWebHttp" contract="NameSpace.IMyClass" ></endpoint>
    <!--MEX-->
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:89/MyAddress"/>
      </baseAddresses>
    </host>
  </service>
</services>

服务如:

[ServiceContract(Namespace = "http://www.mycompany.com", Name = "MyName")]
[DataContractFormat]
public interface IMyClass
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "MyMethod", Method = "POST")]
    bool MyMethod();
}