0

ストリームを使用するときは、ストリームに関連するリソースを解放するためにストリームをフラッシュする必要があることを知っています。ストリームをフラッシュすると、まだ書き込まれていないバッファリングされたデータが取得され、すぐに書き込まれます。

私は次のクラスを持っています:

[XmlRoot("EventList")]
public class EventList
{
    private List<BaseEvent> events_ = new List<BaseEvent>();
    /// Default constructor. Required for serialization
    public EventList() {}

    [XmlElement(ElementName = "Event")]
    public List<BaseEvent> Events
    {
        get 
        {
            return events_;
        }
        set 
        {
            events_ = value;
        }
    }
}

HTTPRequest への応答として送信する前に、フラッシュする必要がありますか? もしそうなら、どうすればいいですか?

ここで説明した問題があるため、質問しています: AJAX 応答 - XmlHttp.responseXML が切断されました

js クライアントによってアクティブ化されるメソッドは次のとおりです。

[WebMethod]
public EventsRequestResult GetEvents(string agentId, int delayedReturnMS)

// EventsRequestResult - return value of the GetEvents method of the EventsService.
public class EventsRequestResult
{
    private EventList events_ = null;
    /// <summary>
    /// List of the events
    /// </summary>
    [XmlElement(ElementName = "Events")]
    public EventList Events
    {
        get
        {
            return events_;
        }
        set
        {
            events_ = value;
        }
    }
    /// Default constructor.
    public EventsRequestResult(){}
    /// <summary>
    /// Constructor used in case of the failure.
    /// </summary>
    /// <param name="errorCode">Numeric error code</param>
    /// <param name="errorDescription">Human readable error description</param>
    public EventsRequestResult(RequestErrorCode errorCode, string errorDescription) : base(errorCode, errorDescription){}
    /// <summary>
    /// Constructor used in case of successful events request.
    /// </summary>
    /// <param name="events">List of the events</param>
    public EventsRequestResult(EventList events) : base()
    {
        events_ = events;
    }
}
4

1 に答える 1

0

マークは上記のコメントで正しいですが、あなたが探しているのは次のようなものだと思います

    using(var stream = theResponse.OutputStream)
    {
        var ser = new XmlSerializer(typeof(EventList));
        return ser.Deserialize(stream) as EventList;
    }

returnfrom ブロックを使用すると、ストリームが閉じられます (およびフラッシュされます)。

于 2013-03-20T10:30:37.313 に答える