【问题标题】:WCF Service and Windows Application Client. why client receives nullWCF 服务和 Windows 应用程序客户端。为什么客户收到 null
【发布时间】:2021-12-21 07:00:23
【问题描述】:

我已将带有 linq 的服务映射到 Sql 类,并且我正在使用 wcf 库用于 vs 2019,并在客户端使用 win 表单应用程序。 我正在尝试将为 linq 创建的类发送到 sql 下一种方式

    public List<Trades> GetAllTradings()
    {
        context = new DCStockTradingDataContext();

        List<Trades> tradings = (from t in context.Trades
                        select t).ToList();
        
        return tradings;
    }

和客户

   private void btnRun_Click(object sender, EventArgs e)
    {
        
        Service1Client client = new Service1Client();
        var trades = client.GetAllTradings();
        
        dgViewStocks.DataSource = trades;
        //string ret = client.GetData("Hello");
        //Console.WriteLine(ret);
    }

我不知道发生了什么,我不知道出了什么问题

服务

并且客户端收到所有null

感谢您对此的任何帮助,并在此先感谢您

【问题讨论】:

    标签: winforms wcf linq-to-sql client-server


    【解决方案1】:

    如果您在 WCF 客户端收到空响应,一些建议:

    • 尝试调用 SoapUi 中的服务,并打开请求和响应的验证。它可能有助于检测问题。
    • 调试 Reference.cs 文件以更仔细地查看发生了什么
    • 使用 MessageInspector 查看 AfterReceiveReply 方法中收到的内容
    • 仔细检查命名空间,由于 Reference.cs 和实际服务中的命名空间不同,响应通常无法反序列化

    【讨论】:

      【解决方案2】:

      感谢您的回复以及我所做的一切。

      我发现我必须如何使用 linq to sql 类和 wcf。我们需要考虑到您需要将 linq 类列表转换为 List

      enter code here
      
          public List<string[]> GetAllStocks()
          {
              context = new DCStockTradingDataContext();
      
              System.Data.Linq.Table<Stocks> stocks = context.GetTable<Stocks>();
              var allStock = (from st in stocks
                              select new
                              {
                                  stockId = (string) st.CodeID,
                                  currency = (char) st.Currency,
                                  stName = st.Name,
                                  price = (decimal) st.Price,
                                  volument = (decimal) st.Volumen
                              }).ToList();
              List<string[]> listRetruned = new List<string[]>();
      
              foreach (var tr in allStock)
              {
                  string[] t = new string[5];
                  t[0] =  tr.stockId;
                  t[1] = tr.currency.ToString();
                  t[2] = tr.stName;
                  t[3] = tr.price.ToString();
                  t[4] = tr.volument.ToString();
                   listRetruned.Add(t);
              }
              return listRetruned;
          }
      

      和客户

      我已经创建了一个包含预期数据的模型类

      public class TradingModel
      {
          public string TradeID { get; set; }
          public string StockId { get; set; }
          public decimal Bid { get; set; }
          public int BidQty { get; set; }
          public decimal Ask{get;set;}
          public int AskQty { get; set; }
          public decimal Last { get; set; }
      }
      

      最后是方法

               List<TradingModel> models = new List<TradingModel>();
             
              for(int i = 0; i < trades.Length; i++)
              {
                  TradingModel model = new TradingModel()
                  {
                      Ask = Convert.ToDecimal(trades[i][0]),
                      Bid = Convert.ToDecimal(trades[i][1]),
                      BidQty = Convert.ToInt32(trades[i][2]),
                      AskQty = Convert.ToInt32(trades[i][3]),
                      Last = Convert.ToDecimal(trades[i][4]),
                      StockId = trades[i][5],
                      TradeID = trades[i][6],
                  };
                  models.Add(model);
          }
          dgViewStocks.DataSource = models;
      

      我不确定这是否是跳到下一步的最佳方式,但它对我有用。如果有人像我一样在寻找这些信息,浪费了几天时间来寻找解决方案,我会留下我所做的。

      当然要更改服务并再次生成代理

      【讨论】:

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