Esempio n. 1
0
 /// <inheritdoc />
 public void StreamResult(ISerializedResult result, int messageSize, TimeSpan?timeElapsed = null, bool writeHeaders = false,
                          bool disposeResult = true)
 {
     if (result == null)
     {
         throw new ArgumentNullException(nameof(result));
     }
     if (!result.IsSerialized)
     {
         result = result.Serialize();
     }
     if (!(result is Content content) || !(content.Body?.Length > 0))
     {
         SendResult(result, result.TimeElapsed, writeHeaders, disposeResult);
         return;
     }
     if (content.IsLocked)
     {
         throw new InvalidOperationException("Unable to stream a result that is already assigned to a different streaming " +
                                             "job. A result can only be streamed once.");
     }
     content.IsLocked = true;
     TerminalConnection?.Suspend();
     if (messageSize < MinStreamBufferSize)
     {
         messageSize = MinStreamBufferSize;
     }
     else if (MaxStreamBufferSize < messageSize)
     {
         messageSize = MaxStreamBufferSize;
     }
     StreamManifest?.Dispose();
     StreamManifest = new StreamManifest(content, messageSize);
     SendJson(StreamManifest);
     buffer = null;
 }