0

我创建了一个从数据库返回一些类别的网络服务。如果我与客户测试 WCF 提供的一切都是完美的。我开始建立一个客户端。我在我的 service 中添加了一个 service 引用http://localhost/Transaction/transaction.svc。我创建了客户端 Web 服务的新实例

  TransactionClient tc = new TransactionClient("BasicHttpEndpoint");
 Category[] availableCategories = tc.GetAllCategories();

我进入Object reference not set to an instance of an object第二行代码。端点名称正确。

知道为什么会出错吗?

PS:如果您需要更多代码,请告诉我要发布的内容。提前致谢。

编辑 :

  [OperationContract]
  List<Category> GetAllCategories();

  Implementation : 
  public List<Category> GetAllCategories()
   { return db.GetAllCategories()}

该服务正在运行,我使用 WCFClient 进行测试,因此我的其余代码必须正确。

这是从数据库中获取项目的代码。我尝试使用发布的解决方案,但应用程序没有停止。

List<Category> response = new List<Category>();
            connect();

            SqlCommand cmd = new SqlCommand("select id_category, name from tbl_category", conn);
            try
            {
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Category new_category = new Category();
                    new_category.id_category = int.Parse(dr["id_category"].ToString());
                    new_category.name = dr["name"].ToString();
                    response.Add(new_category);
                }

            }
            catch (SqlException ex)
            {
                Console.Out.Write(ex.ToString());
            }
            finally
            {
                dr.Close();
                conn.Close();
            }

            return response;
4

1 回答 1

1

FaultException是从 WCF 通道的另一端转移的异常。意思是,该异常并没有在您调用的线上发生tc.GetAllCategories();,而是在服务器端,在处理该方法时发生。

FaultException包装发生在服务器端的异常。从您粘贴的内容中我们可以看到,它是NullReferenceException. 要找到它发生的确切位置,请在GetAllCategories方法中设置断点并逐步执行它直到它失败。由于这是一个 WCF 服务,处理方法调用中的异常不会使服务崩溃,而是将异常包装并发送回客户端。

另一种查找错误发生位置的方法是调试服务,在 Visual Studio 中打开 Debug -> Exceptions 并勾选Common Language Runtime Exceptions旁边的 Throw 列中的复选框。这告诉 VS 调试器在发生错误时停止执行,即使 WCF 会捕获异常。

于 2013-01-28T14:06:52.617 回答