1
votes

I've a Soap application which I want to replicate as a Rest

I've created the following code:

Interface:

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IRestfulCardServices" in both code and config file together.
[ServiceContract]
public interface IRestfulCardServices
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
                                               BodyStyle = WebMessageBodyStyle.Bare,
                                               UriTemplate = "ConsultCards/")]
    List<CardInformation> ConsultCards();
}

Implementation:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulCardServices : IRestfulCardServices
{
    public List<CardInformation> ConsultCards()
    {
        return something;
    } 
}

Web.config

 <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />

        <httpRuntime requestValidationMode="2.0" maxRequestLength="9000000" />
      </system.web>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
      </system.webServer>
      <system.serviceModel>
        <services>

          <service name="ITSCredit.FlowCredit.Services.RestfulCardServices" behaviorConfiguration="serviceBehavior">
            <endpoint address ="" 
                      binding="webHttpBinding" 
                      contract="ITSCredit.FlowCredit.Services.IRestfulCardServices" 
                      behaviorConfiguration="web"></endpoint>
          </service>      
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
            <behavior name="serviceBehavior">
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="web">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <protocolMapping>
          <add binding="basicHttpsBinding" scheme="https" />
        </protocolMapping>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

 <bindings>
      <basicHttpBinding>
 <binding name="BasicHttpBinding_IRestfulCardServices" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="9999524288" maxBufferSize="999965536" maxReceivedMessageSize="999965536" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true" messageEncoding="Text">
          <readerQuotas maxDepth="32" maxStringContentLength="999998192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
</basicHttpBinding>
    </bindings>
  </system.serviceModel>

  <appSettings>
  </appSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

I keep getting a bad Request response as I call it on SoapUi/Postman. If I call the function directly from code behind it works fine. I think the problem might me because of the web config but the examples I've searched seem to be very similar to what I have presently

This is the response error I get:

{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Cache-Control: private
Date: Mon, 05 Jun 2017 16:06:25 GMT Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Content-Length: 0 }}

Any thought about what's missing?

Thanks in advance

1

1 Answers

1
votes

Normally I get this kind of error when I give a wrong service name on the system.serviceModel config.

Check if:

<service name="ITSCredit.FlowCredit.Services.RestfulCardServices" behaviorConfiguration="serviceBehavior"> 

has the correct name (NameSpace.RestfulCardServices)