Веб-сервис возвращает недействительный результат - PullRequest
0 голосов
/ 06 мая 2020

У меня есть веб-сервис C#, который подключается к базе данных SQL и собирает данные путем выполнения хранимой процедуры:

 public class myproj : System.Web.Services.WebService
    {
        [WebMethod]
        public string projmethod(string pnumber)
        {
            List<Projectdetails> projectdetails = new List<Projectdetails>();
            string cs = ConfigurationManager.ConnectionStrings["myconnstring"].ConnectionString;
            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("myprocedure",con);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.Add("@projectid", pnumber);
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    Projectdetails proj = new Projectdetails();
                    proj.projectid = rdr["projectid"].ToString();
                    proj.ID = Convert.ToInt32(rdr["Id"]);
                    proj.contextname = rdr["contextname"].ToString();
                    projectdetails.Add(proj);
                }
            }
            var serializer = new JavaScriptSerializer();
            serializer.MaxJsonLength = Int32.MaxValue;
            var result = serializer.Serialize(projectdetails);
            Context.Response.Write(result);
         return result.ToString();
        }

    }

Это код файла .acmx.cs. Я пытаюсь связать этот веб-сервис с методом нажатия кнопки веб-формы:

     <form id="form1" runat="server">
            <div>
              <asp:Label ID="Label1" runat="server" Text="Label" Font-Bold="True" Font-Italic="False">Enter Project numbers</asp:Label> 
               <asp:TextBox ID="TextBox1" runat="server" Height="46px" Width="235px"></asp:TextBox>
                <br />
                <asp:Button ID="Button1" runat="server" Text="Get" OnClick="Button1_Click" /> 
Font-Italic="False"></asp:Label>
 <asp:Label ID="Label2" runat="server" Text="Label" ></asp:Label>   
            </div>
        </form>

В моем файле aspx.cs у меня есть следующий код:

protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                localhost.myproj det = new localhost.myproj();
                var textinput = TextBox1.Text.ToString();
                string result = det.projmethod(textinput);
                Label2.Visible = true;
                Label2.Text = result.ToString();
            }
            catch
            {
                Label2.Visible = true;
                Label2.Text ="something wrong!";
            }
        }
    }

При компиляции моего веб-сервиса Я вижу Эта страница содержит следующие ошибки: ошибка в строке 1 в столбце 1: документ пуст. Ниже приведено отображение страницы до первой ошибки ..

Никаких дополнительных сведений в веб-сервисе не отображается.

Любая помощь в том, как это можно исправить?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Я исправил веб-сервис и переключил его на тип возврата набора данных:

[WebMethod]
        public DataSet (string pnumber)
        {
            SqlConnection sqlConn = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconstr"].ConnectionString);
            SqlCommand sqlcomm = new SqlCommand();
            sqlcomm.Connection = sqlConn;
            using (sqlConn)
            {
                try
                {
                    using (SqlDataAdapter da = new SqlDataAdapter())
                    {
                        // This will be your input parameter and its value
                        sqlcomm.Parameters.AddWithValue("@projectid", pnumber);                    
                        sqlcomm.CommandText = "mystoredprocedure";
                        da.SelectCommand = sqlcomm;
                        da.SelectCommand.CommandType = CommandType.StoredProcedure;

                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        return ds;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.Message);
                }
            }

            return new DataSet();


        }
    }

И это сработало !! :)

0 голосов
/ 06 мая 2020

Просто замените сигнатуру метода на строку void. Затем верните result. Примерно так:

[WebMethod] public string projmethod(string pnumber) { List<Projectdetails> projectdetails = new List<Projectdetails>(); string cs = ConfigurationManager.ConnectionStrings["myconnstring"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand("myprocedure",con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Add("@projectid", pnumber); con.Open(); SqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { Projectdetails proj = new Projectdetails(); proj.projectid = rdr["projectid"].ToString(); proj.ID = Convert.ToInt32(rdr["Id"]); proj.contextname = rdr["contextname"].ToString(); projectdetails.Add(proj); } } var serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = Int32.MaxValue; var result = serializer.Serialize(projectdetails); return result; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...