【问题标题】:c# web service not returning resultsc# web服务不返回结果
【发布时间】:2012-11-19 03:19:24
【问题描述】:

我最近“完成”了一个新项目,但有一个小问题。我没有得到我的结果。

该项目通过 SOAP 客户端以及请求和响应类使用 c# Web 服务。该项目旨在预留一些东西,在这个演示中,它在电影院预留了一个座位。但是,当数据从 Windows 窗体客户端传递到 Web 服务时,什么都没有返回。我最近在执行 web 方法时停止了项目冻结。

这是调用网络服务的方法(方法签名只是临时的)

public void derp()
{
    var client = new SampleServiceSoapClient();
    var req = new GetReservationRequest();
    req.row = row;
    req.seat = seat;
    req.name = textNameRequest.Text;
    try
    {
        client.GetReservation(req);
    }
    catch (Exception err)
    {
        MessageBox.Show("Server Unavailable");
    }
}

我在单独的线程上运行此方法以停止崩溃。该方法的输出应该通过响应对象返回,然后我将所述对象的值分配给表单上的文本框。但是,数据在返回之前就丢失了。

web方式如下

[WebMethod]
public GetReservationResponse GetReservation(GetReservationRequest req)
{
    object o = HttpContext.Current.Cache["Reservation"];
    if(o == null)
    {
        o = reservedSeat;
    }
    else
    {
        reservedSeat = (bool[,])o;
    }

    GetReservationResponse resp = new GetReservationResponse();
    string rowHolder = "A";
    int rowRequest = req.row;
    int seatCopy = 0;

    bool emptySeat = false;
    while (rowRequest < 12)
    {
        for (int seat = req.seat; seat < 16; seat++)
        {
            if (reservedSeat[req.row, seat])
            {
             //Loop back
            }
            else
            {
                emptySeat = true;
                seatCopy = seat;
                break;
            }
        }
        if (reservedSeat[req.row, 15])
        {
            seatCopy = 0;
            break;
        }
    }
    switch (rowRequest)
    {
        case 1: rowHolder = "A";
            break;
        case 2: rowHolder = "B";
            break;
        case 3: rowHolder = "C";
            break;
        case 4: rowHolder = "D";
            break;
        case 5: rowHolder = "E";
            break;
        case 6: rowHolder = "F";
            break;
        case 7: rowHolder = "G";
            break;
        case 8: rowHolder = "H";
            break;
        case 9: rowHolder = "I";
            break;
        case 10: rowHolder = "J";
            break;
        case 11: rowHolder = "K";
            break;
        case 12: rowHolder = "L";
            break;
        default: rowHolder = "None Specified";
            break;
    }
    int x = 0;
    if (!reservedSeat[rowRequest, seatCopy])
    {
        reservedSeat[rowRequest, seatCopy] = true;
        seatCopy++;
        //resp.row = rowRequest;
        x = seatCopy;
        seatCopy--;
        if (seatCopy.Equals(15))
        {
            rowRequest++;
        }
    }
    resp.row = rowHolder;
    resp.seat = x;   
    //row++            
    return resp;
}

我不知道为什么数据在恢复之前就丢失了,但有些信息会很棒......

【问题讨论】:

  • 您是否尝试分配一个响应变量来查看您是否正在获取数据?例如,'var response = client.GetReservation(req);'?另外,您是否尝试过 fiddler 或 wireshark 来确保请求和响应符合预期?
  • 您似乎没有保存响应。要在代码之外测试 Web 服务,请尝试使用 Web Service Studio 或 SOAPUI。
  • @layoric 那是我的下一步。也知道提琴手和wireshark是什么。雷蒙德,我不知道那些是什么哈哈

标签: c# winforms web-services webmethod


【解决方案1】:

在这段代码中,rowrequest 在哪里增加?在我看来,你在这里有无限循环:

        while (rowRequest < 12)
        {
                for (int seat = req.seat; seat < 16; seat++)
                {
                    if (reservedSeat[req.row, seat])
                    {
                    //Loop back
                    }
                    else
                    {
                        emptySeat = true;
                        seatCopy = seat;
                        break;
                    }
            }
            if (reservedSeat[req.row, 15])
            {
                seatCopy = 0;
                break;
            }
        }

【讨论】:

  • if (seatCopy.Equals(15)) { rowRequest++; }
  • 已经过时了。所以这段代码不会在无限循环中运行,也不能破坏它。症状也类似于无限循环。
  • RowRequest 是从客户端拉取的值。类似于 req.row 但单独存储以保持范围。循环一直执行,直到找到一个空座位然后它终止并将值传递给 for 循环范围之外的外部值
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 2010-09-05
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2011-12-19
相关资源
最近更新 更多