【问题标题】:Object reference not set to an instance of an object in Webservice对象引用未设置为 Web 服务中的对象实例
【发布时间】:2013-06-24 11:59:48
【问题描述】:

在我的项目中,我有一个用于生成列表的 WebService,当我运行 WebService 时,我在 c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx 中获得了 NullReference Exception

谁能指出我的代码有什么问题?

我试过的代码是:

  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

【问题讨论】:

  • 你的代码哪里出错了?
  • @Kostas 我创建的代码文件中没有出现错误,Nullreference ExceptionDefaultWsdlHelpGenerator.aspx
  • @Rajesh 但是哪一行?
  • 你试过调试你的代码吗?然后你可以告诉我们哪条线断了。
  • @Soner & Azhar 我曾尝试在代码中放置一个断点以找出错误的发生点,但在运行过程中,甚至第一行的断点也会出现异常

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


【解决方案1】:

如果您的网站禁用了 AutoEventWireup,则为 asmx 资源的 get 请求生成输出的 ASP.Net 处理程序将不起作用。这是不幸的,因为禁用它是一种性能最佳实践。暂时Enable it in your web.config,完成后关闭。

(给Bryan Allott的帽子提示)

【讨论】:

    【解决方案2】:
    您的 WebMethod 中缺少

    [WebMethod] 属性。 尝试编写您的网络方法,例如,

            [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 服务的一部分公开

    【讨论】:

    • 我在我的 Web 方法顶部使用 [WebMethod] 进行了编辑,但在运行相同的异常时发生。
    • 顺便请你确认一下:只需创建一个全新的 asp.net 网络服务,不做任何事情,尝试运行它并成功运行吗?@ Rajesh
    • 我创建了一个没有代码的全新 Web 服务并尝试运行它,但抛出了相同的异常。
    • 那就不是web服务的问题。你的代码没问题。这是您的 IIS 问题。尝试卸载 IIS,然后重新安装。它应该工作。但我很困惑为什么你的网络服务没有在不同的机器上运行。你真的在那里测试过吗?它在我的机器上运行良好。
    【解决方案3】:

    作为一种解决方案,您可以将 添加到顶部 c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\DefaultWsdlHelpGenerator.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多