2012-06-07 106 views
2

我有我主持,登錄功能工作做好WCF庫,但第二個功能ReturnCounter端點沒有發現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(); 
      } 
     } 

    } 
} 

其中我連接到實體框架

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> 

登錄/ X/Y工作做好,而ReturnCounter給錯誤端點沒有發現

任何想法,以解決這個問題請

+0

當您嘗試調用ReturnCounter Web方法時,返回的錯誤/狀態代碼是什麼?它是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>   
  

另外我在您的代碼中看到您正在傳遞直接由實體框架獲取的對象。有些情況下,實體框架對象不會被反序列化,並可能導致異常。創建一個簡單的POCO,然後填充提取的數據並返回POCO。

+1

除了POCO,我建議將列表作爲IList或數組返回。 – Bronumski

+0

跟蹤不給任何東西 – AMH

+0

@AMH:你是否在服務器上包含配置條目以便跟蹤啓動?什麼是返回的HTTP狀態代碼 – Rajesh

1

爲什麼使用WebInvoke?

要使用獲取操作,您需要爲此方法使用WebGet。

WebInvoke僅用於執行插入更新刪除操作。 我們使用POST,PUT和DELETE方法的名字爲他們。(有序)

當你需要得到一些數據,你應該做這樣的事情,

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

當你發現有一個請求格式此可能是WebMessageFormat中引發的XML或JSON。

對於郵寄操作。您可以使用WebRequest對象。

希望有所幫助。