【问题标题】:Trying to get data from wsdl using c#尝试使用 c# 从 wsdl 获取数据
【发布时间】:2019-05-29 12:48:09
【问题描述】:

我有这个 c# 代码,我试图从 Visual Studio 中的 wsdl 获取数据。 代码没问题,但是当我尝试将数据写入记事本时,它只显示一个空白区域:

WindowsService1.ServiceReference1.GetModifiedBookingsOperationResponse getModbkgsResp;
using (var proxy = new WindowsService1.ServiceReference1.InventoryServiceClient())
{
    int noofBookings = 1;
    getModbkgsResp = proxy.GetModifiedBookings(getModBkgsReq);
    WindowsService1.ServiceReference1.Booking[] bookings = new WindowsService1.ServiceReference1.Booking[noofBookings];
    getModbkgsResp.Bookings = new WindowsService1.ServiceReference1.Booking[noofBookings];
    getModbkgsResp.Bookings = bookings;
    if (getModbkgsResp.Bookings != null)
    {
        for (int i = 0; i < bookings.Length; i++)
        {

            Booking bk = new WindowsService1.ServiceReference1.Booking();
            getModbkgsResp.Bookings[i] = bk;
            if (bk != null )
            {
                bookingSource = bk.BookingSource;
                if (bk.BookingId == Bookingcode)
                {
                    this.WriteToFile("Booking Source =" + bookingSource + "");
                }
                else
                {
                    this.WriteToFile("Sorry could not find your source of booking");

                }
            }
            else
            {
                this.WriteToFile("Looks like source is null " );

            }
        }
    }
    else
    {
        this.WriteToFile("ERROR: Booking details not returned from GetModifiedBookings! " +StartDate);
    }
}

【问题讨论】:

  • 您是否尝试过设置断点并单步执行代码?您认为显示WriteToFile 的定义可能很重要吗?如果问题与无法写入文件的内容有关,在我看来,查看写入文件的实际代码很重要。
  • 您似乎在调用GetModifiedBookings,但随后用一个新数组覆盖了响应的Bookings 数组。这背后的逻辑是什么?是的,当你这样做时,它们都将是空白的。
  • 另外,你确认bookings.Length大于0了吗?
  • @JasonBoyd 下面是 writetoFile 的代码: private void WriteToFile(string text) { string path = "C:\\ServiceLog.txt";使用 (StreamWriter writer = new StreamWriter(path, true)) { writer.WriteLine(string.Format(text, DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))); writer.Close(); } }
  • @JohnWu OK 会尝试修改它并就结果提出建议

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


【解决方案1】:

我不确定您为什么要使用 new 关键字来创建应该从服务中检索到的项目。自然,使用new 创建的任何内容都将使用默认值进行初始化,并且不会包含从服务中检索到的任何数据。

我猜你的代码应该看起来更像这样:

using (var proxy = new WindowsService1.ServiceReference1.InventoryServiceClient())
{
    var response = proxy.GetModifiedBookings(getModBkgsReq);
    if (response.Bookings == null)
    {
        this.WriteToFile("ERROR: Booking details not returned from GetModifiedBookings! " +StartDate);
        return;
    }
    var booking = response.Bookings.SingleOrDefault( b => b.BookingId == bookingCode);
    if (booking == null)
    {
        this.WriteToFile("Sorry could not find your source of booking");
        return;
    }
    var bookingSource = booking.BookingSource;
    this.WriteToFile("Booking Source =" + bookingSource + "");
}

【讨论】:

  • 但它似乎一直返回 null 并显示消息“抱歉找不到您的预订来源”我如何确保它返回一些东西:
  • 知道了。可能是服务中的错误,或者您的预订号码有误。
  • 我什至添加了一个现有的预订号码,但它仍然给出“抱歉找不到您的预订来源”
  • 我已经更新了你的代码并且它可以工作我也更新了服务参考......在视觉工作室......我能够拉预订/数据
猜你喜欢
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多