示例#1
0
        /// <summary>
        /// This constructor uses a Negotiate Listener if one isn't passed.
        ///
        /// Initializes a new instance of the <see cref="WebDavServer" /> class.
        /// </summary>
        /// <param name="store">The
        /// <see cref="IWebDavStore" /> store object that will provide
        /// collections and documents for this
        /// <see cref="WebDavServer" />.</param>
        /// <param name="listener">The
        /// <see cref="IHttpListener" /> object that will handle the web server portion of
        /// the WebDAV server; or
        /// <c>null</c> to use a fresh one.</param>
        /// <param name="methodHandlers">A collection of HTTP method handlers to use by this
        /// <see cref="WebDavServer" />;
        /// or
        /// <c>null</c> to use the built-in method handlers.</param>
        /// <exception cref="System.ArgumentNullException"><para>
        ///   <paramref name="listener" /> is <c>null</c>.</para>
        /// <para>- or -</para>
        /// <para>
        ///   <paramref name="store" /> is <c>null</c>.</para></exception>
        /// <exception cref="System.ArgumentException"><para>
        ///   <paramref name="methodHandlers" /> is empty.</para>
        /// <para>- or -</para>
        /// <para>
        ///   <paramref name="methodHandlers" /> contains a <c>null</c>-reference.</para></exception>
        public WebDavServer(IWebDavStore store, IHttpListener listener = null, IEnumerable <IWebDavMethodHandler> methodHandlers = null)
        {
            if (store == null)
            {
                throw new ArgumentNullException("store");
            }

            if (listener == null)
            {
                listener      = new HttpListenerNegotiateAdapter();
                _ownsListener = true;
            }

            _listener = listener;
            _store    = store;

            _webDavRequestProcessor = new WebDavRequestProcessor(store, methodHandlers);
        }
        /// <summary>
        /// This constructor uses a Negotiate Listener if one isn't passed.
        ///
        /// Initializes a new instance of the <see cref="WebDavServer" /> class.
        /// </summary>
        /// <param name="store">The
        /// <see cref="IWebDavStore" /> store object that will provide
        /// collections and documents for this
        /// <see cref="WebDavServer" />.</param>
        /// <param name="listener">The
        /// <see cref="IHttpListener" /> object that will handle the web server portion of
        /// the WebDAV server; or
        /// <c>null</c> to use a fresh one.</param>
        /// <param name="methodHandlers">A collection of HTTP method handlers to use by this
        /// <see cref="WebDavServer" />;
        /// or
        /// <c>null</c> to use the built-in method handlers.</param>
        /// <exception cref="System.ArgumentNullException"><para>
        ///   <paramref name="listener" /> is <c>null</c>.</para>
        /// <para>- or -</para>
        /// <para>
        ///   <paramref name="store" /> is <c>null</c>.</para></exception>
        /// <exception cref="System.ArgumentException"><para>
        ///   <paramref name="methodHandlers" /> is empty.</para>
        /// <para>- or -</para>
        /// <para>
        ///   <paramref name="methodHandlers" /> contains a <c>null</c>-reference.</para></exception>
        public WebDavServer(IWebDavStore store, IHttpListener listener = null, IEnumerable <IWebDavMethodHandler> methodHandlers = null)
        {
            if (store == null)
            {
                throw new ArgumentNullException("store");
            }
            if (listener == null)
            {
                listener      = new HttpListenerNegotiateAdapter();
                _ownsListener = true;
            }
            methodHandlers = methodHandlers ?? WebDavMethodHandlers.BuiltIn;

            IWebDavMethodHandler[] webDavMethodHandlers = methodHandlers as IWebDavMethodHandler[] ?? methodHandlers.ToArray();

            if (!webDavMethodHandlers.Any())
            {
                throw new ArgumentException("The methodHandlers collection is empty", "methodHandlers");
            }
            if (webDavMethodHandlers.Any(methodHandler => methodHandler == null))
            {
                throw new ArgumentException("The methodHandlers collection contains a null-reference", "methodHandlers");
            }

            _listener = listener;
            _store    = store;
            var handlersWithNames =
                from methodHandler in webDavMethodHandlers
                from name in methodHandler.Names
                select new
            {
                name,
                methodHandler
            };

            _methodHandlers = handlersWithNames.ToDictionary(v => v.name, v => v.methodHandler);
        }