3

私のプロジェクトでは、リストを生成するための WebService があります。WebService を実行するNullReference Exceptionと、c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx.

私のコードの問題は何ですか?

私が試したコードは次のとおりです。

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.Services;
  using System.Data.SqlClient;
  using System.Data;
  using SubSonic;

  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  [System.Web.Script.Services.ScriptService]
public class AutoComplete : System.Web.Services.WebService
{
public AutoComplete()
{
    //InitializeComponent(); 
}

 public string[] Getlist(string keywordstartswith)
   {
    IList<string> output = new List<string>();
    Dictionary<string, string> mydict = new Dictionary<string, string>();
    string QueryString = System.Configuration.ConfigurationManager.ConnectionStrings   ["IUMSNXG"].ToString();
    IDataReader obj_result = SearchApp.DBCon.LRS_SP_CBFM_Sel(keywordstartswith).GetReader();
    DataTable dt = new DataTable();
    dt.Load(obj_result);
    if(dt.Rows.Count > 0)
    {
         while (obj_result.Read())
         {
            output.Add(string.Format("{0}~{1}", obj_result["AnimalCode"].ToString().TrimEnd(), obj_result["pk_animalid"].ToString().TrimEnd()));
         } 
    }
    return output.ToArray();
  }
 }

私が得ているソースエラーは次のとおりです。

Line 1333:
Line 1334:    OperationBinding FindHttpBinding(string verb) {
Line 1335:        foreach (ServiceDescription description in serviceDescriptions) // Getting Error Here
                   {
Line 1336:            foreach (Binding binding in description.Bindings) {
Line 1337:                HttpBinding httpBinding = (HttpBinding)binding.Extensions.Find(typeof(HttpBinding));

スタックトレースは

[NullReferenceException: Object reference not set to an instance of an object.]
   ASP.defaultwsdlhelpgenerator_aspx.FindHttpBinding(String verb) in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx:1335
   ASP.defaultwsdlhelpgenerator_aspx.get_HttpPostOperationBinding() in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx:526
   ASP.defaultwsdlhelpgenerator_aspx.get_ShowingHttpPost() in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx:541
   ASP.defaultwsdlhelpgenerator_aspx.__Render__control20(HtmlTextWriter __w, Control parameterContainer) in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 \Config\DefaultWsdlHelpGenerator.aspx:1574
  System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +109
  System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
  System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +31
  System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
  System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
  System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
  System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208
  System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
  System.Web.UI.Page.Render(HtmlTextWriter writer) +29
  System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
  System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
  System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3060
4

3 に答える 3

3

Web サイトで AutoEventWireup が無効になっている場合、asmx リソースへの get 要求の出力を生成する ASP.Net ハンドラーは機能しません。これを無効にすることはパフォーマンスのベスト プラクティスであるため、残念です。 web.config で一時的に有効にし、完了したら無効にします。

( Bryan Allottに感謝)

于 2015-03-03T21:46:16.620 に答える
2

[WebMethod]属性が WebMethod にありません。次のような Web メソッドを記述してみてください。

        [WebMethod]
        public string[] Getlist(string keywordstartswith)
        {
            IList<string> output = new List<string>();
            Dictionary<string, string> mydict = new Dictionary<string, string>();
            string QueryString = System.Configuration.ConfigurationManager.ConnectionStrings["IUMSNXG"].ToString();
            IDataReader obj_result = SearchApp.DBCon.LRS_SP_CBFM_Sel(keywordstartswith).GetReader();
            DataTable dt = new DataTable();
            dt.Load(obj_result);
            if (dt.Rows.Count > 0)
            {
                while (obj_result.Read())
                {
                    output.Add(string.Format("{0}~{1}", obj_result["AnimalCode"].ToString().TrimEnd(), obj_result["pk_animalid"].ToString().TrimEnd()));
                }
            }
            return output.ToArray();
        }

[WebMethod]属性をパブリック メソッドにアタッチすることは、メソッドを XML Web サービスの一部として公開することを示します。

于 2013-06-24T12:43:17.637 に答える
1

解決策として、 <%@ Page autoEventWireup="true" %> を c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx の先頭に追加できます。

于 2016-01-26T15:06:57.413 に答える