2012-06-07 3 views
2

Je bibliothèque WCF que je résidante, la fonction de connexion bien, mais la seconde fonction ReturnCounterEndpoint not found WCF

l'interface est:

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(); 



    } 
} 

et le code est

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(); 
      } 
     } 

    } 
} 

où je me connecte au cadre d'entité

le web.config ressemble à

<?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> 

le login/x/y bien, tout en ReturnCounter donner le point final d'erreur non trouvé

toute idée de fixer qui veuillez

+0

Quel est le code d'erreur/d'état qui revient lorsque vous essayez d'appeler la méthode Web ReturnCounter? Est-ce Http 400 ou 500 – Rajesh

Répondre

1

tout d'abord permettre Tracing sur votre service et voir ce qui est la cause de l'exception.

En outre, vous envisagez d'augmenter ReaderQuotas sur votre serveur et côté client afin que les données plus volumineuses sont transmises sans aucun problème. Exemple ci-dessous:

<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>   
  

Je vois aussi dans votre code que vous passez l'objet extraites par Entity Framework directement. Il y a des situations où les objets de cadre d'entité ne sont pas désérialisés et peuvent provoquer une exception. Créez un POCO simple, puis remplissez les données récupérées et renvoyez le POCO.

+1

En plus de la POCO, je suggère de retourner la liste comme un «IList» ou un tableau. – Bronumski

+0

le traçage ne donne rien – AMH

+0

@AMH: Avez-vous inclus la config entires sur le serveur pour que le traçage démarre? Aussi quel est le code d'état HTTP qui est retourné – Rajesh

1

Pourquoi WebInvoke?

Pour utiliser une opération Get, vous devez utiliser WebGet pour cette méthode. WebInvoke sert uniquement à exécuter des mises à jour de mise à jour d'insertions. Nous utilisons POST, PUT et DELETE noms de méthode pour eux. (Préposée)

Lorsque vous avez besoin d'obtenir des données que vous devez faire quelque chose comme ça,

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

Comme vous remarquerez qu'il ya un format de demande cette peut être XML ou JSON enumé sur WebMessageFormat.

Pour les opérations post. vous pouvez utiliser l'objet WebRequest.

L'espoir aide.