Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

the resource cannot be found wcf service with SSL

Tags:

asp.net

ssl

wcf

I created a REST api using asp.net vb and I was trying to invoke the api through secure connection (https) but I had an error

The resource cannot be found

I can invoke any method using (http), but with (https) I can't. And I can access the main page of api (service.svc) using the (https) but the problem with functions!! below are my config and function header.

    <system.serviceModel>


   <services>
  <service name="RESTAPI" behaviorConfiguration="MyServiceTypeBehaviors">

    <endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="RESTAPI"/>

<endpoint address="" behaviorConfiguration="HerbalAPIAspNetAjaxBehavior"
      binding="webHttpBinding" contract="HerbalAPI"  />

    <endpoint contract="RESTAPI" binding="mexHttpBinding" address="mex" />


     </service>

</services>

  <!-- **** Services ****-->


<behaviors>

  <serviceBehaviors>
    <behavior name="MyServiceTypeBehaviors">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>


  <endpointBehaviors>
    <behavior name="HerbalAPIAspNetAjaxBehavior">
      <webHttp helpEnabled="true" />
    </behavior>
  </endpointBehaviors>

</behaviors>
 <bindings>
  <customBinding>
    <binding name="basicConfig">
      <binaryMessageEncoding/>
      <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>
    </binding>
  </customBinding>

</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />

API Class

<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class RESTAPI
 <OperationContract()>
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)>
Public Function test(ByVal st As String) As JSONResultString
//any code
End Function
End Class
like image 329
Diyaa Avatar asked Oct 25 '16 17:10

Diyaa


1 Answers

You need to define a special binding configuration in your web.config file to allow the SVC service to bind correctly for HTTPS requests.

Please have a look at this blog post: https://weblogs.asp.net/srkirkland/wcf-bindings-needed-for-https

Your service will already be defined in the web.config, just add the bindingConfiguration attribute:

<services>
  <service name="TestService">
    <endpoint address="" behaviorConfiguration="TestServiceAspNetAjaxBehavior"
      binding="webHttpBinding" bindingConfiguration="webBindingHttps" contract="TestService" />
  </service>
</services>

Then define the special binding settings for the webHttpBinding as so, the magic part that fixes the HTTPS request is the <security mode="Transport" />:

<bindings>
  <webHttpBinding>
    <binding name="webBindingHttps">
     <security mode="Transport">
     </security>
    </binding>
  </webHttpBinding>
</bindings>

This will effectively switch the service over to HTTPS, but if you want to have both HTTP and HTTPS to work you need to define 2 binding configurations and then have 2 identical endpoints per service, where the one uses the http bindingConfiguration and the other uses the https bindingConfiguration like so:

<bindings>
  <webHttpBinding>
    <binding name="webBindingHttps">
     <security mode="Transport">
     </security>
    </binding>
    <binding name="webBindingHttp">
      <!-- Nothing special here -->
    </binding>
  </webHttpBinding>
</bindings>

<services>
  <service name="TestService">
    <endpoint address="" behaviorConfiguration="TestServiceAspNetAjaxBehavior"
      binding="webHttpBinding" bindingConfiguration="webBindingHttps" contract="TestService" />
    <endpoint address="" behaviorConfiguration="TestServiceAspNetAjaxBehavior"
      binding="webHttpBinding" bindingConfiguration="webBindingHttp" contract="TestService" />
  </service>
</services>
like image 146
Wasted_Coder Avatar answered Nov 11 '22 11:11

Wasted_Coder