Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Endpoint not found - WCF web service

I have created 2 endpoints for my WCF service.

It is working fine with basicHttpBinding but causes error for webHttpBinding.

Error = Endpoint not found.

Operation contract definition

[OperationContract]
[WebInvoke(Method = "POST",
           BodyStyle = WebMessageBodyStyle.WrappedRequest,
           ResponseFormat = WebMessageFormat.Json)]
VINDescription CallADSWebMethod(string vin, string styleID);

web.config:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="Description7aBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://services.chromedata.com:80/Description/7a"
                binding="basicHttpBinding"
                bindingConfiguration="Description7aBinding"
                contract="description7a.Description7aPortType"
                name="Description7aPort"/>
    </client>
    <services>
      <service behaviorConfiguration="asmx" name="ADSChromeVINDecoder.Service">
        <endpoint name="httpEndPoint" 
                  address="" 
                  binding="basicHttpBinding"
                  contract="ADSChromeVINDecoder.IService"/>
        <endpoint name="webEndPoint"
                  address="json"
                  behaviorConfiguration="web"
                  binding="webHttpBinding"
                  contract="ADSChromeVINDecoder.IService"/>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
          <enableWebScript/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="asmx">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>

Please suggest me how I can fix this?

like image 881
James Avatar asked Oct 15 '12 14:10

James


People also ask

What does endpoint not found mean?

404 Not FoundThe endpoint exists, but the resource cannot be found. The endpoint exists and the resource can be found, but the user does not have the required permissions to access it, and so the server returns a 404 status code.

What is endpoint in WCF service?

Endpoints provide clients access to the functionality offered by a WCF service. Each endpoint consists of four properties: An address that indicates where the endpoint can be found. A binding that specifies how a client can communicate with the endpoint.

What is WCF mex endpoint?

The Metadata Exchange Endpoint (MEX) is a special endpoint in WCF that exposes metadata used to describe a service, then the mex endpoint is exposed at another relative address ended with \mex. For exmaple: http://localhost:8000/ServiceModelSamples/service/mex.


1 Answers

I have created a similar service as the one that you have according to this:

 [ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate="/CallADSWebMethod", Method="POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
    string CallADSWebMethod(string vin, string styleID);
}

The important thing that I added was the UriTemplate part that tells the service how the call should look like. I then implemented this service as:

public class Service : IService
{
    public string CallADSWebMethod(string vin, string styleID)
    {
        return vin + styleID;
    }
}

and in my web.config I have the following:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="Description7aBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="UserName" algorithmSuite="Default"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="asmx" name="WebApplication1.Service">
    <endpoint address="basic" binding="basicHttpBinding" name="httpEndPoint" contract="WebApplication1.IService"/>
    <endpoint address="json" binding="webHttpBinding" behaviorConfiguration="webBehavior" name="webEndPoint" contract="WebApplication1.IService"/>
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>
</services>
<behaviors>
    <endpointBehaviors>
        <behavior name="webBehavior">
            <webHttp />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
    <behavior name="asmx">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>

I have then created a simple page that looks like this that calls this service using jQuery:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#Ok").click(function () {
                var jData = {};
                jData.vin = "one";
                jData.styleID = "test";
                $.ajax({
                    type: "POST",
                    url: "/Service.svc/json/CallADSWebMethod",
                    data: JSON.stringify(jData),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        alert(msg);
                    },
                    error: function (jqXHR, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type="button" id="Ok" name="Ok" value="Ok" />
    </div>
    </form>
</body>
</html>

and this produces a alert with the text onetest. Hope this can give som guidance.

like image 159
Johan Lundqvist Avatar answered Sep 25 '22 13:09

Johan Lundqvist