0

で実行される単純な REST ベースの WCF サービスを作成しましたBasicHttpBinding。私の webmethod の 1 つで、JSON 応答を指す Stream を返しています。

メソッドは次のようになります。

[OperationContract]
[FaultContract(typeof(ApplicationFault))]
[WebInvoke(Method = "POST", UriTemplate = "GetActiveCalls/{nurseid}")]
Stream GetActiveCalls(string nurseid);

の本体から のGetActiveCallsオブジェクトを作成しMemoryStream、同じものをレスポンスとして返します。コードは次のようになります

// Serialize the results as JSON
string jsonResult = new JavaScriptSerializer().Serialize(baseResponses);

// ContentType json
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Cache-Control", "no-cache");
var bytes = Encoding.UTF8.GetBytes(jsonResult);
//Parse to memorystream
var ms = new MemoryStream(bytes);
ms.Seek(0, SeekOrigin.Begin);
ms.SetLength(bytes.LongLength);
return ms;

クライアントからこれを試すと、次のような結果が得られます

{"LastEvents":[{"FormatValues":"Klic 2 3 4","Icon":null,"Color":"Red","Acknowledged":false,"EventID":28566}],"Message":"","Status":true}

しかし、同じメソッドを複数回呼び出した後、次のような応答が得られることがあります。

{"LastEvents":[{"FormatValues":"Klic 2 3 4","Icon":null,"Color":"Red","Acknowledged":false,"EventID":28566}],"Message":"","Statu{"LastEv

"StatuJSON 応答の後、ストリームがリセットされ、最初からデータの取得が開始されることがわかります。

私には奇妙に見えます。

※サーバー側からは、ブレークポイントを入れるとMemoryStream正しい反応を示しているようです。

4

1 に答える 1