私は ac# cascadingdropdown を持っています。これは、ローカルでのデバッグとライブ サーバーでのデバッグ モードで完全に動作しますが、ブラウザーでページをライブで表示すると、両方のドロップダウンで [メソッド エラー 500] が表示されます。最初のドロップダウン [メソッド エラー 500] をクリックすると、2 番目のドロップダウンに [メソッド エラー 500] が表示されます。
ASPX コードは次のとおりです。
<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 コード ビハインドは次のとおりです。
[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 エラーはありません。ただし、別の Web サイトの同じサーバーで同様の ccd を実行していますが、それは完全に機能します。非常にイライラします。
私はこの Stackoverflow questionを見ましたが、正直なところ、解決策が何であるかはよくわかりませんでした.binフォルダーに重複したdllがないようです. 私は本当に問題がどこかにあると思います。
SQL クエリを再確認したところ、両方ともデータが返されました。
助言がありますか?私はそれらを使い果たしました!
編集:
Failed Request Tracing を設定したところ、次のような非常に役立つ結果が得られました。
MODULE_SET_RESPONSE_ERROR_STATUS 警告 ModuleName="ManagedPipelineHandler", Notification="MAP_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="The operation completed successfully. (0x0)", ConfigExceptionInfo=" "警告
/wastedropdown.asmx/getwaste と Wastedropdown.asmx/getbintype で同じエラーが生成されました。
うまくいけば、これは誰かにとって何かを意味するでしょう!
EDIT2:
コードは、同じサーバー上の別の Web サイトで確実に正常に動作します。次のエラーが発生しました。
{"メッセージ":"許可されていない GET 要求を使用して \u0027GetWaste\u0027 メソッドを呼び出そうとしました。","StackTrace":" System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData 、HttpContext コンテキスト)\r\n System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext コンテキスト、WebServiceMethodData methodData) で","ExceptionType":"System.InvalidOperationException"}
ヘルプ!