AMH
AMH

Reputation: 6451

Endpoint not found WCF

I have WCF library that I hosted , the login function work well, but the second function ReturnCounter

the interface is :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;
using System.ServiceModel.Web;

namespace PMAService
{
    [ServiceContract]
    public interface IPMA
    {
        [OperationContract]
        string Login(string username, string password);

        [OperationContract]
        List<usp_ReturnEncounter_Result> ReturnEncounter();



    }
}

and the code is

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel.Web;
using System.Security.Cryptography;
using System.Web.Security;

namespace PMAService
{
    public class PMA : IPMA
    {

        [WebInvoke(Method = "GET",
   ResponseFormat = WebMessageFormat.Json,
   UriTemplate = "LogIn/{username}/{password}")]
        public string Login(string username, string password)
        {
            if (Membership.ValidateUser(username, password))
                return "true";
            else
                return "false";
        }

        // Method to retrieve the Counter 
        [WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "ReturnEncounter")]
        public List<usp_ReturnEncounter_Result> ReturnEncounter()
        {
            using (PMAEntities context = new PMAEntities())
            {
              return   context.usp_ReturnEncounter().ToList();
            }
        }

    }
}

where I connect to Entity framework

the web.config look like

<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings>
</connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <roleManager enabled="true" />
    <membership>
      <providers>
        <remove name="AspNetSqlMembershipProvider"/>
        <add name="AspNetSqlMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
             connectionStringName="Login"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             applicationName="/"
             requiresUniqueEmail="false"
             passwordFormat="Hashed"
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="1"
             minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10"
             passwordStrengthRegularExpression="" />
      </providers>
    </membership>

    <authentication mode="Windows"/>
    <customErrors mode="On"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="PMAService.PMA">
        <endpoint binding="webHttpBinding" contract="PMAService.IPMA" behaviorConfiguration="web">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

the login/x/y work well, while ReturnCounter give the error endpoint not found

any idea to fix that please

Upvotes: 2

Views: 5109

Answers (2)

Davut G&#252;rb&#252;z
Davut G&#252;rb&#252;z

Reputation: 5746

Why WebInvoke?

For use of a Get operation you need to use WebGet for this Method.

WebInvoke is for just Executing Insert Update Delete uperations. We use POST, PUT and DELETE method names for them.(Orderly)

When you need to get some data you should do something like that,

  [WebGet(UriTemplate = "ReturnEncounter",
 RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

As you notice there is a request format this may be XML or JSON enumed on WebMessageFormat.

For post ops. you may use WebRequest object.

Hope helps.

Upvotes: 1

Rajesh
Rajesh

Reputation: 7886

First of all enable Tracing on your Service and see what is the cause for exception.

Also you would consider increasing ReaderQuotas on your server and client side so that larger data is passed without any problem. Sample shown below:

<system.serviceModel>    
<bindings>
<webHttpBinding>
          <binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
             <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                  maxNameTableCharCount="2147483647" />
            <security mode="None" />
          </binding>
        </webHttpBinding>
</bindings>
</system.serviceModel>   
 

Also i see in your code that you are passing the object fetched by entity framework directly. There are situations where the entity framework objects dont get deserialzed and might cause exception. Create a simple POCO and then populate the fetched data and return the POCO.

Upvotes: 1

Related Questions