2012-06-07 2 views
2

У меня есть библиотека WCF, которые я провел, функцию Логин работу хорошо, но вторая функция ReturnCounterEndpoint не найден WCF

интерфейс:

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



    } 
} 

и код

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

    } 
} 

, где я подключаюсь к инфраструктуре Entity

web.config выглядит как

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

Логин/х/у хорошо работают, в то время как ReturnCounter дают конечную точку ошибки не найден

любую идею, чтобы установить, что угождать

+0

Каков код ошибки/состояния, который возвращается при попытке вызвать веб-метод ReturnCounter? Это Http 400 или 500 – Rajesh

ответ

1

Прежде всего включить Tracing на службу и посмотреть, что причина для исключения.

Также вы бы подумали о том, чтобы увеличить количество запросов ReaderQuotas на вашем сервере и на стороне клиента, чтобы передавать большие данные без каких-либо проблем. Пример приведен ниже:

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

Также я вижу в вашем коде, который вы передаете объект извлекался структурой объекта непосредственно. Бывают ситуации, когда объекты инфраструктуры сущности не получают deserialzed и могут вызвать исключение. Создайте простой POCO, а затем заполните заполненные данные и верните POCO.

+1

В дополнение к POCO я бы предложил вернуть список как 'IList' или массив. – Bronumski

+0

трассировка не дает ничего – AMH

+0

@AMH: Вы включили конфигурацию на сервер для трассировки для запуска? Также, что возвращает код состояния HTTP – Rajesh

1

Почему WebInvoke?

Для использования операции Get вам необходимо использовать WebGet для этого метода.

WebInvoke предназначен для выполнения вставки обновления. Удаляет исключения. Мы используем POST, PUT и DELETE имена методов для них. (Дежурный)

Когда вам нужно получить некоторые данные, которые вы должны сделать что-то подобное,

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

Как вы заметили, есть формат запроса этого может быть XML или JSON перечислены в WebMessageFormat.

Для пост ops. вы можете использовать объект WebRequest.

Надежда помогает.

Смежные вопросы