【问题标题】:Consuming WCF service in Console Application在控制台应用程序中使用 WCF 服务
【发布时间】:2017-07-30 01:16:41
【问题描述】:

我是这个网站的新手。我目前正在研究 wcf 。我正试图从这项艰苦的工作中取得一些成就,但我遇到了一些问题。我在我的 MS Visual Stuido 2015 中运行了 WCF 服务,该服务具有名为 AccountBalance 的本地类,并且该类有几个字符串属性,如 account_number、account_balace 等。我创建了数据库在 MS Sql 服务器中。目前我正在控制台应用程序中使用 wcf 服务。我正在尝试使用帐号作为密钥从控制台窗口中的数据库中检索记录。当我输入帐号时,它应该在控制台应用程序中显示数据库中的其余记录,但我收到错误消息,我无法运行它。 无法从“字符串”转换为 MyService.AccountBalanceRequest' 这是从另一个基类继承的类代码..

           [DataContract]
         public class AccountBalanceRequest : Current_Account_Details
            {
    string account_number;

    [DataMember]
    public string Account_Number
    {
        get { return account_number; }
        set { account_number = value; }
    }
}

}

这是 ADO.NET 代码..

      public bool AccountBalanceCheek(AccountBalanceRequest accountNumber)
    {
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM 
             Current_Account_Details WHERE Account_Number ='" + 
              accountNumber.Account_Number + "'", conn))
            {
                cmd.Parameters.AddWithValue("@Account_Number", 
                accountNumber.Account_Number);
               cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                return true;

            }

        }
    }

这是控制台应用程序代码..

      public static void Balance()
    {
        MyService.HalifaxCurrentAccountServiceClient currentAccount = new MyService.HalifaxCurrentAccountServiceClient("NetTcpBinding_IHalifaxCurrentAccou
            ntService");

        MyService.AccountBalanceRequest cs = new MyService.AccountBalanceRequest();


        string AccountNumber;


        Console.WriteLine("\nEnter your Account Number--------:");
        AccountNumber = Console.ReadLine();
        cs.Account_Number = AccountNumber;
         MyService.AccountBalanceRequest cs1 = 

     currentAccount.AccountBalanceCheek(AccountNumber);//Error on this line.

                Console.WriteLine("Your Account Number is :" + cs.Account_Number);
                Console.WriteLine("Your Account Type :" + cs.Account_Balance);
                Console.WriteLine("Your Account Account Fee :" + cs.Account_Fee);
                Console.WriteLine("Your Account Balance:" + cs.Account_Balance);
                Console.WriteLine("Your Account Over Draft Limit :" + cs.Over_Draft_Limit);

                Console.Write("--------------------------");
                Console.ReadLine();




    }

我也尝试过这种方式。代码确实出现了任何错误,但没有给出预期的结果。这是代码。

  public static void Balance()
    {
        MyService.HalifaxCurrentAccountServiceClient currentAccount = new MyService.HalifaxCurrentAccountServiceClient("NetTcpBinding_IHalifaxCurrentAccountService");
        MyService.AccountBalanceRequest cs = new MyService.AccountBalanceRequest();


        string AccountNumber;


        Console.WriteLine("\nEnter your Account Number--------:");
        AccountNumber = Console.ReadLine();
        cs.Account_Number = AccountNumber;
        // MyService.AccountBalanceRequest cs1 = currentAccount.AccountBalanceCheek(AccountNumber);



       if (currentAccount.AccountBalanceCheek(cs))
        {

                Console.WriteLine("Your Account Number is :" + cs.Account_Number);
                Console.WriteLine("Your Account Type :" + cs.Account_Balance);
                Console.WriteLine("Your Account Account Fee :" + cs.Account_Fee);
                Console.WriteLine("Your Account Balance:" + cs.Account_Balance);
                Console.WriteLine("Your Account Over Draft Limit :" + cs.Over_Draft_Limit);

                Console.Write("--------------------------");
                Console.ReadLine();
                //Console.Clear();


       }

    }

这是输出的图像。This is image of the out put

【问题讨论】:

  • 有什么建议或解决方案吗??
  • 提示:您将从数据库读取的值填充到对象的何处?您正在使用@Account_Number,但您的 SQL 语句没有使用它。
  • 好的。在 ado.net 和控制台应用程序中
  • 您需要使用数据库中的值填充您的对象并返回它。看看这里的第一个例子 - docs.microsoft.com/en-us/dotnet/framework/data/adonet/… 你也可以改变你的方法签名如下:public AccountBalanceRequest AccountBalanceCheek(string accountNumber) - 即,输入参数是字符串,返回值是你的对象。您必须从数据库中读取(通过 DatabaseReader)并填充您的对象
  • 您提供的链接实际上并未与 WCF 服务交互。谢谢@Subbu

标签: c# wcf ado.net console-application


【解决方案1】:

正确的方法是:

currentAccount.AccountBalanceCheek(cs);

不是:

currentAccount.AccountBalanceCheek(AccountNumber);

因为参数的类型是MyService.AccountBalanceRequest,而不是string

希望对你有所帮助:)

【讨论】:

  • 我确实尝试过,但是当我在控制台窗口中输入帐号时,它只有一品脱的帐号,而不是其余的数据库记录。谢谢阿里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多