簡體   English   中英

為什么從Ajax調用Web服務會引發內部服務器500錯誤?

[英]Why calling a webservice from ajax throws internal server 500 error?

我使用ajax $ .post方法將數據發送到我的.asmx Web服務,但是會引發內部服務器500錯誤。

.asmx.cs

namespace WebServices
{
  /// <summary>
  /// Summary description for himher
  /// </summary>
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
  [System.Web.Script.Services.ScriptService]
  public class himher : System.Web.Services.WebService
  {
    [WebMethod(EnableSession = true)]
    //[ScriptMethod(UseHttpGet = false)]
    public string InsertUsers(string name, string pwd)
    {
      basicoperation bop = new basicoperation();
      return bop.insertUsers(name, pwd);
    }
  }
}
function save() {
  $("button").click(function() {
    $.post("http://localhost:8373/himher.asmx?op=InsertUsers", {
      name: "testing ajax name", 
      pwd: "testing ajax pwd"
    }, function(data, status) {
      alert(data);
    });
  });
}

我收到此錯誤:

加載資源失敗:服務器響應狀態為500(內部服務器錯誤)

我還為chrome添加了擴展,例如Allow-Control-Allow-Origin

我已經花了很多時間,而且還不能解決。 幫助我。 我是AJAX的新手。

是的,我已經測試了Web服務,並且它可以正常工作,例如將數據發送到SQL表。 C#的末尾沒有錯誤。 它也不例外。

我嘗試在IIS Express和Windows IIS上運行它,並且都返回相同的錯誤。 救命。

更新:insertusers

 public string insertUsers(string Name, string Password)
        {
                string status;

                String ConStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(ConStr);    // to make a connection with DB 

                SqlCommand sqlCom = new SqlCommand("InsertUsers", sqlCon); // now in order to perform action such as insert SP, we must create command object which needs command name and conncetion only

                sqlCom.CommandType = CommandType.StoredProcedure;  // you must tell the system that insertInfo is a storedprocedure 

                SqlParameter sqlParamName = new SqlParameter("@UserName", Name);
                SqlParameter sqlParamPwd= new SqlParameter("@Password", Password);

                sqlCom.Parameters.Add(sqlParamName);
                sqlCom.Parameters.Add(sqlParamPwd);      

                try
                {
                    sqlCon.Open();

                    sqlCom.ExecuteNonQuery();   // executenonquery is used for INSERT, UPDATE, DELETE 

                    //sqlCom.ExecuteScalar();   // used to pick or read a single value from procedure
                   // Response.Write("Done");

                    sqlCon.Close();

                    status= "Success";
                }
                catch (Exception ex)
                {
                    //response.Write(ex.Message);
                    status = ex.Message;
                }
            return status;
        }

堆棧跟蹤:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">System.Web.Services.Protocols.SoapException: Server was unable to process request. ---&gt; System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlTextReader.Read()
   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()
   at System.Xml.XmlReader.MoveToContent()
   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()
   at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()
   at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
   at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean&amp; abortProcessing)
   --- End of inner exception stack trace ---</soap:Text></soap:Reason><soap:Detail /></soap:Fault></soap:Body></soap:Envelope>

解決了。 我想通了,這肯定是一個JavaScript問題。

唯一需要做的就是刪除 來自網址,例如

"http://localhost:8373/himher.asmx/InsertUsers",

代替

"http://localhost:8373/himher.asmx?op=InsertUsers"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM