0

私は 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"}

ヘルプ!

4

5 に答える 5

1

取得するデータが大きすぎるためだと思います。次のコードを web.config に追加する必要があります。

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

よろしく


于 2015-03-18T00:19:51.497 に答える
0

チェックアウト リンク: メソッド エラー 500 http://www.codeproject.com/Questions/201182/Method-Error-500-on-cascading-dropdownlist

このタイプのエラーに関する情報を取得できます: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681388(v=vs.85).aspx

于 2013-05-08T11:26:52.420 に答える
0

私は同じ問題を抱えていました。追加の役割サービスをインストールした後、Tt が動作し、停止しました。その後、数時間頭を悩ませた後、サイトのハンドラー マッピングで、*.asmx の 1 つのスクリプト メソッドのバージョン番号が間違っていることがわかりました。公開トークン: B03F5F7F11D50A3A を探します。バージョン 2.0.0.0 が表示されている場合は削除します。それでおしまい。

于 2014-02-28T15:15:27.480 に答える
0

私は、キャメルケースのメソッド名を使用することで、URLが小文字になるようにIISの書き換えコードと競合するという答えを見つけました。

これは、残念なことに、これまで使用したことがなかった Fiddler を使用して発見されました。私は今、完全な改宗者です!

于 2013-05-13T09:38:42.463 に答える