System.Windows.AssemblyPart.StreamToBuffer C# (CSharp) Method

StreamToBuffer() private method

private StreamToBuffer ( Stream assemblyStream ) : byte[]
assemblyStream Stream
return byte[]
		byte[] StreamToBuffer (Stream assemblyStream)
		{
			// it's normally bad to depend on Stream.Length since some stream (e.g. NetworkStream) 
			// don't implement them. However it is safe in this case (i.e. SL2 depends on Length too)
			var buffer = new byte [assemblyStream.Length];

			using (assemblyStream) {
				int length = buffer.Length;
				int offset = 0;
				while (length > 0) {
					int read = assemblyStream.Read (buffer, offset, length);
					if (read == 0)
						break;

					length -= read;
					offset += read;
				}
			}

			return buffer;
		}

Usage Example

示例#1
0
文件: Deployment.cs 项目: ynkbt/moon
        // note: throwing MoonException from here is NOT ok since this code is called async
        // and the exception won't be reported, directly, to the caller
        void AssemblyGetResponse(IAsyncResult result)
        {
            Assembly asm;

            object[]             tuple = (object [])result.AsyncState;
            WebRequest           wreq  = (WebRequest)tuple [0];
            ManifestAssemblyKind kind  = (ManifestAssemblyKind)tuple [1];
            int error_code             = (kind == ManifestAssemblyKind.ExternalAssembly) ? 2152 : 2105;

            try {
                HttpWebResponse wresp = (HttpWebResponse)wreq.EndGetResponse(result);

                if (wresp.StatusCode != HttpStatusCode.OK)
                {
                    wresp.Close();
                    EmitError(error_code, String.Format("Error while downloading the '{0}'.", wreq.RequestUri));
                    return;
                }

                if ((kind != ManifestAssemblyKind.ExternalAssembly) && (wresp.ResponseUri != wreq.RequestUri))
                {
                    wresp.Close();
                    EmitError(error_code, "Redirection not allowed to download assemblies.");
                    return;
                }

                using (Stream responseStream = wresp.GetResponseStream()) {
                    byte [] buffer = AssemblyPart.StreamToBuffer(responseStream);

                    if (IsZip(buffer))
                    {
                        // unzip it.
                        using (MemoryStream dest = new MemoryStream()) {
                            using (MemoryStream source = new MemoryStream(buffer)) {
                                ManagedStreamCallbacks source_cb;
                                ManagedStreamCallbacks dest_cb;
                                StreamWrapper          source_wrapper;
                                StreamWrapper          dest_wrapper;

                                source_wrapper = new StreamWrapper(source);
                                dest_wrapper   = new StreamWrapper(dest);

                                source_cb = source_wrapper.GetCallbacks();
                                dest_cb   = dest_wrapper.GetCallbacks();

                                // Zip files may contain multiple assemblies, all of which need to be loaded. Keep
                                // attempting to open subsequent files until it fails.
                                for (int i = 0; ; i++)
                                {
                                    if (!NativeMethods.managed_unzip_stream_to_stream_nth_file(ref source_cb, ref dest_cb, i))
                                    {
                                        break;
                                    }
                                    if (Load(dest.ToArray(), kind) == null)
                                    {
                                        EmitError(2153, String.Format("Error while loading '{0}'.", wreq.RequestUri));
                                    }
                                    source.Position = 0;
                                    dest.SetLength(0);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (Load(buffer, kind) == null)
                        {
                            EmitError(2153, String.Format("Error while loading '{0}'.", wreq.RequestUri));
                        }
                    }
                }
                Dispatcher.BeginInvoke(AsyncDownloadComplete);
            }
            catch (Exception e) {
                // we need to report everything since any error means CreateApplication won't be called
                EmitError(error_code, e.ToString());
            }
        }
All Usage Examples Of System.Windows.AssemblyPart::StreamToBuffer