0

データベースからいくつかのカテゴリを返す Web サービスを作成しました。WCFが提供していることをクライアントでテストすると、すべてが完璧です。クライアントの構築を開始しました。サービスへのサービス参照を追加しました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コードの 2 行目に進みます。エンドポイント名は正しいです。

エラーの理由は何ですか?

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

FaultExceptionWCFチャネルの反対側から例外が転送されます。つまり、その例外は、呼び出した回線では発生しませんでしtc.GetAllCategories();たが、サーバー側では、そのメソッドの処理中に発生しました。

FaultExceptionサーバー側で発生した例外をラップします。あなたが貼り付けたもので私たちが見ることができるものから、それはNullReferenceExceptionです。発生する正確な場所を見つけるには、GetAllCategoriesメソッドにブレークポイントを設定し、失敗するまでステップスルーします。これはWCFサービスであるため、メソッド呼び出しの処理で例外が発生してもサービスはクラッシュしませんが、例外をラップしてクライアントに送り返します。

エラーが発生した場所を見つける別の方法は、サービスをデバッグし、VisualStudioで[デバッグ]->[例外]を開き、[共通言語ランタイムの例外]の横にある[スロー]列のチェックボックスをオンにすることです。これは、例外がWCFによってキャッチされた場合でも、エラーが発生したときにVSデバッガーに実行を停止するように指示します。

于 2013-01-28T14:06:52.617 に答える