Skip to main content
 首页 » 编程设计

c# web 服务不返回结果

2024年01月01日47mate10pro

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

该项目通过 SOAP 客户端以及请求和响应类使用 C# Web 服务。该项目旨在保留一些东西,在这个演示中,它在电影院中保留了一个座位。但是,当数据从 Windows 窗体客户端传递到 Web 服务时,没有任何返回。我最近阻止了项目在执行 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"); 
    } 
} 

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

网页方法如下

[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; 
} 

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

请您参考如下方法:

此代码中 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; 
            } 
        }