Upload control only works in debug mode in VS2010

10 posts, 0 answers
  1. Lance
    Lance avatar
    34 posts
    Member since:
    Sep 2007

    Posted 07 Apr 2011 Link to this post

    Hi,

    I am using the RadUpload control in my Silverlight 4 application and it works correctly if I launch the application via debug in Visual Studio 2010.  If I go straight to this application via the browser or if I start it in Visual Studio with "Start Without Debugging", it fails with the error: "Handler not found or execution of the handler failed!  The remote server returned an error: NotFound.  Check RadUpload's BufferSize property remarks.". 

    This error occurs after selecting the file to upload from the FileDialog and is captured in the e.ErrorMessage of the FileUploadFailed event.  It worked okay before.  I am currently using 2011_1_0328 version of the Telerik controls.

    If I navigate directly to the handler in the browser I get "{"JSONData":[{"Key":"RadUAG_message","Value":"Empty file name"},{"Key":"RadUAG_success","Value":false}]}".

    Please help.

  2. Tina Stancheva
    Admin
    Tina Stancheva avatar
    3298 posts

    Posted 12 Apr 2011 Link to this post

    Hello Tim English,

    We cannot be sure what is the cause for your issue since we can't reproduce it on our side. However, since navigating to the handler gives you this output:
    "{"JSONData":[{"Key":"RadUAG_message","Value":"Empty file name"},{"Key":"RadUAG_success","Value":false}]}".
    then the handler can be reached through that path. Therefore the issue might be caused either by an error in the path set in the RadUpload.UploadServiceUrl (do you define an absolute or a relative url, can you try setting the url you use to navigate to it in the browser?) or by some settings in your IIS.

    Where do you deploy your application and where do you try to reach it? Basically the VisualStudio uses an ASP.NET server to deploy the applications in debug mode and this is why the application runs correctly in debug mode and doesn't otherwise. So you may need to adjust the setting in your IIS (if your application is deployed in IIS).

    Kind regards,
    Tina Stancheva
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. DevCraft banner
  4. Lance
    Lance avatar
    34 posts
    Member since:
    Sep 2007

    Posted 14 Apr 2011 Link to this post

    Hi Tina,

    I am using a relative path and using iis.  I ran the application with Firebug and in debug mode the path to the handler was correct (see correctpathtoraduploadhandlerindebug.gif).  When I ran it out of debug, the path to the RadUploadHandler was incorrect (see correctpathtoraduploadhandleroutofdebug.gif).  Please ignore the other two files uploaded; I made a mistake and wasn't able to delete them.

    Below is some of my code which may help.  Please help me with this it is getting urgent.

    My RadHandler cs code:
    using Telerik.Windows;
    using System.IO;
      
    namespace _4Cast.Web
    {
       /// <summary>
       /// Summary description for RadSilverlightUploadHandler
       /// </summary>
       public class RadSilverlightUploadHandler : RadUploadHandler
       {
      
          public RadSilverlightUploadHandler()
          {
               
          }
      
          public override string GetTargetFolder()
          {
             string targetFolder = base.GetTargetFolder();
             string userId = GetQueryParameter("UserId");
      
             if (!string.IsNullOrEmpty(userId)  && !targetFolder.EndsWith(userId))
             {
                targetFolder += Path.DirectorySeparatorChar + userId;
             }
      
             //Modify targetFolder
             return targetFolder;
          }
      
          private bool PrepareStorageFolder()
          {
             string folderPath = GetTargetFolder();
      
             if (!Directory.Exists(folderPath))
             {
                Directory.CreateDirectory(folderPath);
             }
      
             return Directory.Exists(folderPath);
          }
      
      
          public override bool SaveChunkData(string filePath, long position, byte[] buffer, int contentLength, out int savedBytes)
          {
             PrepareStorageFolder();
      
             return base.SaveChunkData(filePath, position, buffer, contentLength, out savedBytes);
          }
    }

    My custom upload control xaml:
    <UserControl x:Class="_4Cast.UploadFilesControl"
        xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
        xmlns:this="clr-namespace:_4Cast"
        xmlns:theming="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.Toolkit"
        >
        <Grid x:Name="LayoutRoot" VerticalAlignment="Top" HorizontalAlignment="Left">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition Height="25"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
      
            <StackPanel Grid.Row="0" Grid.Column="0" x:Name="spFiles" Orientation="Vertical" Visibility="Visible">
                <Border x:Name="brdHeader" Background="{StaticResource BlackHeader_Background}" Height="30" Width="{Binding Path=Width, ElementName=LayoutRoot}" >
                    <TextBlock x:Name="txtHeader" Foreground="White" Height="30" Width="{Binding Path=Width, ElementName=LayoutRoot}" Margin="12,0,0,-15">Uploaded Files:</TextBlock>
                </Border>
                <this:MyListBox x:Name="lstFiles" KeyDown="lstFiles_KeyDown" SelectionMode="Multiple" VerticalAlignment="Top" HorizontalAlignment="Left" Width="{Binding Path=Width, ElementName=LayoutRoot}" />
                <StackPanel x:Name="spProgress" VerticalAlignment="Center" Visibility="Collapsed">
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                        <TextBlock HorizontalAlignment="Center" x:Name="loadingText" Text="Loading... " FontSize="20"  />
                        <TextBlock HorizontalAlignment="Center" x:Name="loadingPercentage" Text="" FontSize="20"  />
                    </StackPanel>
                    <telerik:RadProgressBar x:Name="pb" Width="260" Height="30" Minimum="0" Maximum="1000" Margin="0,0,0,30" />
                </StackPanel>
            </StackPanel>
      
      
            <Button Grid.Row="1" Grid.Column="0" x:Name="btnUpLoad" Click="btnUpLoad_Click" Height="25"/>
        </Grid>
    </UserControl>

    My custom upload control cs:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.IO;
    using System.ComponentModel;
    using System.Collections.ObjectModel;
    using System.Windows.Browser;
    using System.ServiceModel;
    using System.Windows.Threading;
    using System.Diagnostics;
    using System.ServiceModel.Channels;
      
    namespace _4Cast
    {
       public partial class UploadFilesControl : UserControl
       {
          private string _UploadType = string.Empty;
          private string _UploadServiceUrl = "../RadSilverlightUploadHandler.ashx";
          private string _FileFilter = "All Files (*.*)|*.*";
          private int _MaxFileSizeInKilobytes = 3072;
          private int _MaxUploadSizeInKilobytes = 10240;
          private int _ParentId = 0;
          private string strSelectedFileName = string.Empty;
          private Brush _BackColour;
          private OpenFileDialog dialog = new OpenFileDialog();
          private string _UploadDestination = "UserUploads/";
          private string _UploadButtonText = "Upload";
          private static Telerik.Windows.Controls.RadUpload ruAttachments = new Telerik.Windows.Controls.RadUpload();
          private double UserControlHeight = 190;
          private double UserControlWidth = 400;
      
          private List<string> FilesMarkedForDeletion = new List<string>();
      
          public UploadFilesControl()
          {
             InitializeComponent();
      
             Loaded += UploadFilesControl_Loaded;
             Unloaded += UploadFilesControl_Unloaded;
          }
      
          void UploadFilesControl_Loaded(object sender, RoutedEventArgs e)
          {
             try
             {
                ruAttachments.UploadServiceUrl = UploadServiceUrl;
                ruAttachments.MaxFileSize = MaxFileSizeInKilobytes * 1024;
                ruAttachments.MaxUploadSize = MaxFileSizeInKilobytes * 1024;
                ruAttachments.Filter = FileFilter;
                ruAttachments.TargetFolder = UploadDestination;
                ruAttachments.IsAutomaticUpload = true;
                ruAttachments.OverwriteExistingFiles = true;
                ruAttachments.IsPauseEnabled = false;
                ruAttachments.UploadServiceUrl = "../RadSilverlightUploadHandler.ashx";
                ruAttachments.FileUploadStarting += ruAttachments_FileUploadStarting;
                ruAttachments.UploadStarted += ruAttachments_UploadStarted;
                ruAttachments.UploadFinished += ruAttachments_UploadFinished;
                ruAttachments.ProgressChanged += ruAttachments_ProgressChanged;
                ruAttachments.FileUploadFailed += ruAttachments_FileUploadFailed;
                ruAttachments.FileCountExceeded += ruAttachments_FileCountExceeded;
                ruAttachments.FileTooLarge += ruAttachments_FileTooLarge;
      
      
                btnUpLoad.Content = UploadButtonText;
      
                if (!double.IsNaN(Height) || Height > 0)
                {
                   UserControlHeight = Height;
                }
      
                if (!double.IsNaN(Width) || Width > 0)
                {
                   UserControlWidth = Width;
                }
      
                LayoutRoot.Height = UserControlHeight;
                LayoutRoot.Width = UserControlWidth;
      
                lstFiles.Height = LayoutRoot.Height - (brdHeader.Height + btnUpLoad.Height);
             }
             catch
             {
             }
          }
      
          void UploadFilesControl_Unloaded(object sender, RoutedEventArgs e)
          {
             try
             {
                ruAttachments.FileUploadStarting -= ruAttachments_FileUploadStarting;
                ruAttachments.UploadStarted -= ruAttachments_UploadStarted;
                ruAttachments.UploadFinished -= ruAttachments_UploadFinished;
                ruAttachments.ProgressChanged -= ruAttachments_ProgressChanged;
                ruAttachments.FileUploadFailed -= ruAttachments_FileUploadFailed;
                ruAttachments.FileCountExceeded -= ruAttachments_FileCountExceeded;
                ruAttachments.FileTooLarge -= ruAttachments_FileTooLarge;
             }
             catch
             {
             }
          }
      
          public bool IsDirty
          {
             get
             {
                return lstFiles.Items.Count > 0;
             }
          }
      
          public List<string> UploadedFiles
          {
             get
             {
                List<string> uf = new List<string>();
      
                for (int i = 0; i < lstFiles.Items.Count; i++)
                {
                   uf.Add(lstFiles.Items[i].ToString());
                }
      
                return uf;
             }
          }
      
          void ruAttachments_FileUploadStarting(object sender, Telerik.Windows.Controls.FileUploadStartingEventArgs e)
          {
             e.FileParameters.Add("UserId", App.WcfPushClient.UserId);
          }
      
          private void ruAttachments_UploadStarted(object sender, Telerik.Windows.Controls.UploadStartedEventArgs e)
          {
             lstFiles.Visibility = Visibility.Collapsed;
             spProgress.Visibility = Visibility.Visible;
          }
      
          void ruAttachments_ProgressChanged(object sender, RoutedEventArgs e)
          {
             try
             {
                pb.Value += ruAttachments.CurrentSession.CurrentFileProgress;
                int value = Math.Max(0, Math.Min(100, Convert.ToInt32((pb.Value / (pb.Maximum - pb.Minimum)) * 100)));
                loadingPercentage.Text = value.ToString() + " %";
      
                if (Convert.ToInt32((pb.Value / (pb.Maximum - pb.Minimum) * 100)) == 100)
                {
                   loadingText.Text = "Loaded    ";
                }
             }
             catch
             {
             }
          }
      
          void ruAttachments_FileUploadFailed(object sender, Telerik.Windows.Controls.FileUploadFailedEventArgs e)
          {
             MessageBox.Show(e.ErrorMessage, "Upload Error", MessageBoxButton.OK);
          }
      
          void ruAttachments_FileTooLarge(object sender, Telerik.Windows.Controls.FileEventArgs e)
          {
             MessageBox.Show("Unable to upload file (" + e.SelectedFile.Name + ") because at " + e.SelectedFile.Size.ToString() + "bytes, it exceeds the maximum upload size of " + ruAttachments.MaxFileSize.ToString() + "bytes.", "Upload Error", MessageBoxButton.OK);
          }
      
          void ruAttachments_FileCountExceeded(object sender, RoutedEventArgs e)
          {
             MessageBox.Show("Unable to complete uploading all files because the maximum number of files that can be uploaded (" + ruAttachments.MaxFileCount + ") has been exceeded.", "Upload Error", MessageBoxButton.OK);
          }
      
          private void ruAttachments_UploadFinished(object sender, RoutedEventArgs e)
          {
             lstFiles.Visibility = Visibility.Visible;
             spProgress.Visibility = Visibility.Collapsed;
      
             pb.Value = pb.Minimum;
             loadingText.Text = "Loading... ";
      
             FillListBoxWithUploadFiles();
          }
      
          private void btnUpLoad_Click(object sender, RoutedEventArgs e)
          {
             ruAttachments.ShowFileDialog();
          }
      
          private void lstFiles_KeyDown(object sender, KeyEventArgs e)
          {
             try
             {
                switch (e.Key)
                {
                   case Key.Delete:
                      if (lstFiles.SelectedItems != null && lstFiles.SelectedItems.Count > 0)
                      {
                         for (int i = 0; i < lstFiles.SelectedItems.Count; i++)
                         {
                            for (int r = 0; r < ruAttachments.Items.Count; r++)
                            {
                               Telerik.Windows.Controls.RadUploadItem rui = ruAttachments.Items[r] as Telerik.Windows.Controls.RadUploadItem;
      
                               if (rui != null)
                               {
                                  if (rui.FileName == lstFiles.SelectedItems[i].ToString())
                                  {
                                     FilesMarkedForDeletion.Add(lstFiles.SelectedItems[i].ToString());
                                     ruAttachments.Items.Remove(rui);
                                  }
                               }
                            }
                         }
      
                         lstFiles.Items.Clear();
                         FillListBoxWithUploadFiles();
                         DeleteFilesMarkedForDeletion();
                      }
      
                      break;
                }
             }
             catch
             {
             }
          }
      
          public void ClearUploadedFiles()
          {
             UploadedFiles.Clear();
             lstFiles.Items.Clear();
             spProgress.Visibility = Visibility.Collapsed;
          }
      
          private void FillListBoxWithUploadFiles()
          {
             try
             {
                for (int i = 0; i < ruAttachments.Items.Count; i++)
                {
                   Telerik.Windows.Controls.RadUploadItem rui = ruAttachments.Items[i] as Telerik.Windows.Controls.RadUploadItem;
      
                   if (rui != null && !lstFiles.Items.Contains(rui.FileName))
                   {
                      lstFiles.Items.Add(rui.FileName);
                   }
                }
             }
             catch
             {
             }
          }
      
          public Brush BackColour
          {
             get
             {
                return _BackColour;
             }
             set
             {
                _BackColour = value;
                LayoutRoot.Background = _BackColour;
             }
          }
      
          public string UploadDestination
          {
             get
             {
                if (UploadType.Length > 0 && !_UploadDestination.EndsWith(UploadType))
                {
                   _UploadDestination += UploadType;
                }
      
                return _UploadDestination;
             }
          }
      
          public string UploadType
          {
             get
             {
                //Ensure contains only 1 trailing '/'
                _UploadType = _UploadType.TrimEnd(System.IO.Path.AltDirectorySeparatorChar) + System.IO.Path.AltDirectorySeparatorChar;
      
                return _UploadType;
             }
             set
             {
                _UploadType = value;
             }
          }
      
          public string UploadServiceUrl
          {
             get
             {
                return _UploadServiceUrl;
             }
             set
             {
                _UploadServiceUrl = value;
             }
          }
      
          public string UploadButtonText
          {
             get
             {
                return _UploadButtonText;
             }
             set
             {
                _UploadButtonText = value;
             }
          }
      
          public string FileFilter
          {
             get
             {
                return _FileFilter;
             }
             set
             {
                _FileFilter = value;
                dialog.Filter = _FileFilter;
             }
          }
      
          public int ParentId
          {
             get
             {
                return _ParentId;
             }
             set
             {
                _ParentId = value;
             }
          }
      
          public int MaxFileSizeInKilobytes
          {
             get
             {
                return _MaxFileSizeInKilobytes;
             }
             set
             {
                _MaxFileSizeInKilobytes = value;
             }
          }
      
          public int MaxUploadSizeInKilobytes
          {
             get
             {
                return _MaxUploadSizeInKilobytes;
             }
             set
             {
                _MaxUploadSizeInKilobytes = value;
             }
          }
      
      
      
      
          public void DeleteFilesMarkedForDeletion()
          {
             try
             {
                FilesMarkedForDeletion.ForEach(f =>
                {
                   //Don't delete current choice.
                   if (f.Length > 0)
                   {
                      try
                      {
                         App.FileManagementClient.DeleteUploadedFileAsync(UploadDestination.Replace(System.IO.Path.AltDirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar), f, App.WcfPushClient.UserId);
                      }
                      catch (CommunicationException commEx)
                      {
                         FaultException faultEx = commEx as FaultException;
      
                         if (faultEx == null)
                         {
                            App.FileManagementClient.DeleteUploadedFileAsync(UploadDestination.Replace(System.IO.Path.AltDirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar), f, App.WcfPushClient.UserId);
                         }
                      }
                   }
                });
      
                FilesMarkedForDeletion.Clear();
             }
             catch
             {
             }
          }
    }
    }

  5. Tim
    Tim avatar
    20 posts
    Member since:
    Jan 2009

    Posted 15 Apr 2011 Link to this post

    I am having this issue as well.  I did a release build and deployed to our production server and I was getting the "Check RadUpload's Buffersize property remarks" error.  I switched to a debug build and deployed and it went away.
  6. Nick Wood
    Nick Wood avatar
    126 posts
    Member since:
    Feb 2010

    Posted 19 Apr 2011 Link to this post

    Hi All

    Any resolution for this issue as I am having the exact same problem?

    Nick
  7. Tina Stancheva
    Admin
    Tina Stancheva avatar
    3298 posts

    Posted 19 Apr 2011 Link to this post

    Hello guys,

    Unfortunately we cannot reproduce this issue on our side. I created a project based on the code Tim English sent and I deployed it in IIS - you can see this screencast that illustrates how the project is deployed, and the application works as expected. I attached the sample project to this thread as well. Am I missing something?

    At this point I am at a loss as to why you are seeing the exception. However, since your code works as expected on our side, I believe that the cause for the issue is in your environment settings. Therefore any additional info that you can give us about that might help.

    Also, you can have a look at this Troubleshooting RadUpload KB article, some of the hints there might help you.

    Best wishes,
    Tina Stancheva
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  8. Edward Pauley
    Edward Pauley avatar
    48 posts
    Member since:
    May 2010

    Posted 06 May 2011 Link to this post

    Hi 
    i also get the same problem. 
    Check your sample project to compare with mine and the trouble shooting link but don't see any difference

    Does anyone manage to resolve this problem? plz help me

    or can telerik make a video from beginning to end at how you create the RadUpload handler, setting IIS from start to end? i look at your provided video and that one doesn't really helpful at all because it doesn't show any setting in IIS

    thanks
  9. Tim
    Tim avatar
    20 posts
    Member since:
    Jan 2009

    Posted 06 May 2011 Link to this post

    @Edward

    Thanks for the reminder.  I was part of this thread earlier and didn't have a solution until recently.  This might work for you:

    For about 6 months these 2 lines of code worked fine to set the path to my upload service.  Note the 2 periods for a relative path

    RadUpload radUpload = new RadUpload();
    radUpload.UploadServiceUrl = "../FileUploadHandler.ashx";

    I then changed it the code to explictly define the path and I could once again get my radupload to work in release or debug.

    RadUpload radUpload = new RadUpload();
    string sBaseUrl = Application.Current.Host.Source.ToString().ToLower();
    int iIndexOfClientBin = sBaseUrl.IndexOf("/clientbin");
    sBaseUrl = sBaseUrl.Substring(0, iIndexOfClientBin);
    radUpload.UploadServiceUrl = sBaseUrl + "/FileUploadHandler.ashx";

    BTW - Is there a more elegant way to get the Base URL?

    -Tim
  10. Tina Stancheva
    Admin
    Tina Stancheva avatar
    3298 posts

    Posted 11 May 2011 Link to this post

    Hello guys,

    We did our best to reproduce the problem on our side, but to no avail. This is why we are not sure what might be causing this issue. If you have any thought on how we might be able to reproduce it, that would be much appreciated.

    In the meantime,
    @Tim
    The RadUpload internally uses similar to your BaseUrl logic to construct the url of the UploadHandler and this is why its strange that the radUpload.UploadServiceUrl = "../FileUploadHandler.ashx"; definition doesn't work. However, we are definitely glad to hear that you found an approach that works for you.

    @ Edward
    Can you give Tim's approach a try and let us know if it works for you? Thanks in advance.

    Kind regards,
    Tina Stancheva
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  11. Edward Pauley
    Edward Pauley avatar
    48 posts
    Member since:
    May 2010

    Posted 11 May 2011 Link to this post

    Hi

    Tim's approach really works for me.

    the approach "../FileHandler.ashx" doesn't work

    thanks
Back to Top
DevCraft banner