2013-05-08 3 views
0

로컬에서 디버그 모드와 라이브 서버에서 완벽하게 작동하는 aC# cascadingdropdown이 있지만 라이브 페이지를 볼 때 두 드롭 다운에서 [방법 오류 500]이 발생합니다 브라우저를 통해. 첫 번째 드롭 다운을 클릭하면 [Method Error 500]이 표시되고 두 번째 드롭 다운은 [Method Error 500]으로 채워집니다.AJAX 계단식 드롭 다운 방법 오류 500

[ScriptService] 
public class WasteDropDown : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public CascadingDropDownNameValue[] GetBinType(string knownCategoryValues, string category) 
    { 
     int wtID; 
     StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); 
     if (!kv.ContainsKey("Waste") || !Int32.TryParse(kv["Waste"], out wtID)) 
     { 
      throw new ArgumentException("Couldn't find waste type."); 
     }; 

     SqlConnection conn = new SqlConnection(myConn.conn); 
     conn.Open(); 
     SqlCommand comm; 
     comm = new SqlCommand("dbo.sl_TLU", conn); 
     comm.CommandType = CommandType.StoredProcedure; 
     comm.Parameters.Add(new SqlParameter("@binWTID", SqlDbType.Int)); 
     comm.Parameters["@binWTID"].Value = wtID; 

     SqlDataReader dr = comm.ExecuteReader(); 
     List<CascadingDropDownNameValue> l = new List<CascadingDropDownNameValue>(); 

     while (dr.Read()) 
     { 
      l.Add(new CascadingDropDownNameValue(
      dr["bT"].ToString(), 
      dr["bPLUID"].ToString())); 
     } 
     conn.Close(); 
     return l.ToArray(); 
    } 

    [WebMethod] 
    public CascadingDropDownNameValue[] GetWaste(string knownCategoryValues, string category) 
    { 
     SqlConnection conn = new SqlConnection(myConn.conn); 
     conn.Open(); 

     SqlCommand comm; 
     comm = new SqlCommand("dbo.sl_binQWT", conn); 
     comm.CommandType = CommandType.StoredProcedure; 

     SqlDataReader dr = comm.ExecuteReader(); 
     List<CascadingDropDownNameValue> l = new List<CascadingDropDownNameValue>(); 

     while (dr.Read()) 
     { 
      l.Add(new CascadingDropDownNameValue(
      dr["binWT"].ToString(), 
      dr["wtID"].ToString())); 
     } 
     conn.Close(); 
     return l.ToArray(); 
    } 
} 

이 로그에는 ASP.Net 오류가 없습니다 :

<asp:DdlNoEventValidation ID="ddlWasteTypeList" runat="server" /> 
<asp:DdlNoEventValidation ID="ddlBinTypeList" runat="server" /> 

<asp:CustomValidator 
    ID="CustomValidator1" runat="server" 
    ControlToValidate="ddlBinTypeList" 
    OnServerValidate="CustomValidatorBinType_ServerValidate" 
    ValidateEmptyText="True" 
    > 
</asp:CustomValidator> 

<asp:CascadingDropDown ID="ccd1" runat="server" 
    ServicePath="WasteDropDown.asmx" 
    ServiceMethod="GetWaste" 
    TargetControlID="ddlWasteTypeList" 
    Category="Waste" 
    PromptText="select waste" LoadingText="[Loading waste...]" 
/> 
<asp:CascadingDropDown ID="ccd2" runat="server" 
    ServicePath="WasteDropDown.asmx" 
    ServiceMethod="GetBinType" 
    TargetControlID="ddlBinTypeList" 
    ParentControlID="ddlWasteTypeList" 
    Category="BinType" 
    PromptText="select bin" LoadingText="[Loading bins...]" 
/> 

여기 뒤에 ASMX 코드입니다 :

다음은 ASPX 코드입니다. 그러나, 나는 다른 웹 사이트에 동일한 서버에서 실행되는 유사한 ccd가 있고 완벽하게 작동합니다 - 매우 실망합니다.

나는 this Stackoverflow question을 보았지만 솔직히 해결책이 무엇인지 알지 못했습니다. bin 폴더에 중복 된 dll이없는 것 같지만. 나는 정말로 문제가 여기 어딘가에 있다고 생각한다.

SQL 쿼리를 두 번 확인했으며 데이터를 반환했습니다.

제안 사항? 나는 그 (것)들을 다 썼다!

편집 :

나는 실패한 요청 추적을 설정하고이 정말 도움이 결과를 얻을했습니다 같은 오류가 /wastedropdown.asmx/getwaste 및 wastedropdown.asmx에 대해 생성 된

MODULE_SET_RESPONSE_ERROR_STATUS Warning ModuleName="ManagedPipelineHandler", Notification="MAP_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="The operation completed successfully. (0x0)", ConfigExceptionInfo=""Warning

을/getbintype

이 정보가 도움이 되었기를 바랍니다.

EDIT2 :

코드는 확실히 동일한 서버에 다른 웹 사이트에 잘 작동합니다. Fiddler가 다음 오류를 낳았습니다.

{"Message":"An attempt was made to call the method \u0027GetWaste\u0027 using a GET request, which is not allowed.","StackTrace":" at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

HELP!

답변

0

내가 다음 몇 가지 IIS과 충돌 낙타의 경우 메소드 이름을 사용하여 다운 된 답을 발견 URL이 소문자인지 확인하기 위해 코드를 다시 작성하십시오.

이것은 내 수치심에 사용 된 피들러를 사용하여 발견되었습니다. 나는 이제 총 개종자가되었다!

0

발견 된 방법 500은 올바르지 않은 코드 또는 데이터베이스 보안 권한이 올바르게 설정 되었기 때문입니다.

데이터 테이블이 데이터를 반환하는지 확인하십시오 (예 : IIS 앱 풀에 올바른 권한이 있고 KnownCategoryvalues ​​(예 : bPLUID 값) 및 카테고리 (예 :Bintype)은 정확하고 올바른 방법은 dr["bT"].ToString()이고 r["bPLUID"].ToString()));입니다. 두 가지 웹 메소드를 모두 확인하십시오.

호출을 통해 웹 메소드를 테스트 할 수 있습니다. 쓰레기를 버리면 값을 필요로하지 않아야합니다. getBinWaste은 아마도 알려진 카테고리 값 = bPLUID : [여기에 id 값 입력] 카테고리 bintype이됩니다.

결국 분노하지만 결국 작동하지 않습니다.

0

동일한 문제가있었습니다. 추가 역할 서비스를 설치 한 후 Tt가 작동을 멈췄습니다. 몇 시간 동안 머릿속을 헤매다가 사이트의 핸들러 매핑에서 * .asmx에 대한 하나의 스크립트 메소드가 잘못된 버전 번호를 가지고 있다는 것을 알았습니다! 공개 토큰을 찾으십시오 : B03F5F7F11D50A3A, 버전 2.0.0.0이 표시되면 삭제하십시오. 그게 전부 야.

1

나는 당신이 얻고있는 데이터가 너무 크다고 생각한다. 당신은 당신의 Web.config에 다음 코드를 추가해야합니다 :

<system.web.extensions> 
    <scripting> 
     <webServices> 
      <jsonSerialization maxJsonLength="5000000" /> 
     </webServices> 
    </scripting> 
</system.web.extensions> 

감사


관련 문제