【发布时间】:2013-05-02 14:12:00
【问题描述】:
我有一个 c# cascadingdropdown,它可以在本地调试和实时服务器上的调试模式下完美运行,但是当我通过浏览器实时查看页面时,两个下拉菜单中都会出现 [方法错误 500]。如果我单击第一个下拉列表 [Method Error 500],然后使用 [Method Error 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 错误。但是,我在不同网站的同一台服务器上运行了一个类似的 ccd,并且运行良好 - 非常令人沮丧。
我确实看过this Stackoverflow question,但老实说,我并没有完全理解解决方案是什么——尽管我似乎在 bin 文件夹中没有任何重复的 dll。我真的认为问题出在某个地方。
我已经仔细检查了 SQL 查询,它们都返回了数据。
有什么建议吗?我已经用完了它们!
编辑:
我已经设置了失败的请求跟踪并得到了这个非常有用的结果:
MODULE_SET_RESPONSE_ERROR_STATUS 警告 ModuleName="ManagedPipelineHandler", Notification="MAP_REQUEST_HANDLER", HttpStatus="500", HttpReason="内部服务器错误", HttpSubStatus="0", ErrorCode="The 操作成功完成。 (0x0)", ConfigExceptionInfo=""警告
/wastedropdown.asmx/getwaste 和 wastedropdown.asmx/getbintype 产生了同样的错误
希望这对某人有意义!
EDIT2:
代码在同一服务器上的不同网站上肯定可以正常工作。我让 Fiddler 出现以下错误:
{"Message":"尝试调用方法 \u0027GetWaste\u0027 使用 GET 请求,这不是 允许。","StackTrace":" 在 System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData 方法数据,HttpContext 上下文)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext 上下文,WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}
帮助!
【问题讨论】:
标签: asp.net web-services cascadingdropdown