ASP.NET WebService:身份验证失败。 ExceptionType “:” System.InvalidOperationException”

时间:2009-12-10 13:00:38

标签: c# asp.net ajax web-services autocomplete

我的网页上有一个文本框和Ajax autocompleteextender。我在本地Dev Machine上没有问题。当我将此页面上传到远程主机时,“Authentication failed.ExceptionType”:“System.InvalidOperationException”此错误。

这是我的代码;

 <form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="~/WebService.asmx" />
    </Services>
</asp:ScriptManager>
<div>
    <asp:TextBox ID="txtAra" runat="server"></asp:TextBox>
    <cc1:autocompleteextender id="AutoCompleteExtender1" runat="server" servicepath="~/WebService.asmx"
        servicemethod="IsmeGoreGetir" minimumprefixlength="1" targetcontrolid="txtAra"
      >
                    </cc1:autocompleteextender>
</div>
</form>

然后是Web服务端;

OleDbConnection con;
OleDbCommand cmd;
OleDbDataReader dr;


[WebMethod(EnableSession = true)]
public string[] IsmeGoreGetir(string prefixText, int count)
{
    con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("~/App_Data/nobetRehber.mdb"));

    cmd = new OleDbCommand( "Select * from Rehber Where AD like '" + prefixText.ToUpper() + "%'",con);

    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    if (con.State != ConnectionState.Open)
        con.Open();

    DataTable dt = new DataTable();
    da.Fill(dt);
    string[] items = new string[dt.Rows.Count];
    int i = 0;
    foreach (DataRow dr in dt.Rows)
    {
        items.SetValue(dr["AD"].ToString(), i);
        i++;
    }
    con.Close();
    return items;
}

2 个答案:

答案 0 :(得分:2)

  • 哇,我真的希望你不要将它上传到面向公众的服务器。 http://sqlmap.sourceforge.net/将在几秒钟内拥有该网站。 prefixText:=“1 = 1; DELETE * FROM Rehber; - ”是一个非常简单的版本。

  • 由于您有字段,我只能假设您在一个连接上有多个阅读器。你正在隐藏野战博士。

    • 由于是这种情况,您每次调用时都会分配一个新连接,从而导致内存泄漏。
    • 由于是这种情况,您刚刚创建了许多竞争条件来访问字段con。

    • 同样适用于cmd。

  • dr [“AD”]。如果db-schema与代码脱节,ToString()可以抛出null ref。

因此,如果您修复竞争条件和有趣的代码,它实际上可能会有效。另外,下次提供堆栈跟踪。 :)

答案 1 :(得分:0)

直接在IE中从客户端调用IE中的页面WebService.asmx。首先检查webservice在托管到生产机器后是否可访问。

如果它的工作。检查客户端从代码调用服务时需要哪种身份验证。

此问题与Connection或命令无关。它与Web服务认证有关。

参考。 http://support.microsoft.com/kb/813834