2016-10-07 2 views
0

VB.NETコードのカスタムオブジェクトをAngularJS HTTP Postに返すようにしています。ユーザーの要求に基づいて、このオブジェクトは非常に大きくなる可能性があります。非常に、非常に大きい。それが起こったときはいつでも、シリアル化しようとするとOutOfMemoryExceptionが発生します。したがって、私は今にStringWriterを使用して、それをserialzeするNewtonsoftからJSON.NETパッケージを使用しています:

Using sw As New StringWriter() 
    Using writer As JsonWriter = New JsonTextWriter(sw) 
     Dim serializer As New JsonSerializer() 
     serializer.Serialize(writer, periodData) 
     writer.Flush() 
    End Using 
End Using 

これは動作しますが、私はその後、私はまだそのOutOfMemoryException例外を取得sw.ToStringをしようとするとき。

私はインターネットを徘徊し、HttpResponseオブジェクトに送信されたStreamWriterを使用して、応答をフラッシュしてWebクライアント呼び出しに戻すことができると信じています。しかし、私はこれを行う方法を理解することはできません。

助けが必要ですか?あるいは、私が道を離れる場合、私にこれを行うためのよりよい方法を教えてください。

アップデート1

どうやら私はエラー「オペランドを使用するとsystem.idisposableを実装しなければなりません」を取得するので、私が使用して文の中でのHttpResponseを使用することはできません。だから、WebMethodでHttpResponseオブジェクトを作成するのに問題があります。 TextWriterとHttpWriterの両方をコンストラクタのparamsとして渡すとエラーが出ます。

アップデート2

わかりましたので、オブジェクトをシリアル化しようとしたとき、私はもはやOutOfMemoryException例外を取得しています。しかし、私はStreamWriterがHttpResponseオブジェクトに書き込むように見えないので、何か間違っていると思います。これは私の現在のコードです:私はクロームデベロッパーコンソールで私JavaScriptを一時停止したときに

Dim response As HttpResponse = HttpContext.Current.Response() 
response.ContentType = "application/json" 
response.Clear() 
response.BufferOutput = True 

Using sw As New StreamWriter(response.OutputStream, System.Text.Encoding.UTF8) 
    Using writer As JsonWriter = New JsonTextWriter(sw) 
     Dim serializer As New JsonSerializer() 
     serializer.Serialize(writer, periodData) 
     writer.Flush() 
    End Using 
    sw.Flush() 
End Using 

response.Flush() 

はその後、応答オブジェクトは、単に空の文字列です。 javascriptは単なる基本的な$ http.post呼び出しです:

$http.post('url.aspx/GetData', angular.toJson({ 
    param1: data1, 
    param2: data2, 
    param3: data3 
})).then(function (response) { 
    //Do stuff with response which is currently an empty string. 
} 

私のVB.NETコードは正しいとは思いません。助けて?

+0

*あなたがHttpResponseオブジェクトに送信されたStreamWriterを使用して、応答をフラッシュしてWebクライアント呼び出し*に戻すことができる*。なぜあなたはそれを試してみませんか?問題が発生した場合は助けてもらえますが、コードを書くことはできません:) – djv

答えて

0

あなたの質問からはっきりとは分かりませんが、HttpResponseに書き込むためのStreamWriterの作成に問題があるようです。別の質問へthis answerのように、レスポンスオブジェクトを使用すると、(使用して文で)StreamWriterのコンストラクタに与えることができますプロパティOutputStreamがあり

[WebMethod] 
public static void YourServiceMethod() 
{ 
    HttpResponse response = HttpContext.Current.Response; 

    // ... now go on 
} 

あなたはのHttpContextからのレスポンスオブジェクトを取得することができます:あなたは、Oを実行している

using (TextWriter textWriter = new StreamWriter(response.OutputStream, System.Text.Encoding.UTF8)) 
{ 
    // ... now write your data 
} 

(C#のサンプルを与えるすみません、それは私がはるかに精通していますものです。)

+0

StreamWriterデータをHttpResponseオブジェクトにどうやって取得しますか? JsonWriter、StreamWriter、およびHttpResponseオブジェクトをフラッシュしようとしました。何も働かなかった。 – Michael

+0

@MichaelWang StreamWriterはレスポンスの出力ストリームに書き込みを行い、StreamWriterに書き込むと、それは基本的にそれです。 ---あなたは本当にVerdolinoの助言に従って、あなたの現在のコードの本質をあなたの質問に入れてください。それはちょっとした詳細が間違っているかもしれません。 – Matthias

関連する問題