en-US-Custom.txt access error in Web Farm

3 posts, 0 answers
  1. Eric
    Eric avatar
    24 posts
    Member since:
    Jan 2008

    Posted 26 Apr 2010 Link to this post

    Hi,

    I have a web farm with 3 servers. I am using RadEditor with Ajax spellchecker enabled on it in a web page.

    I sometimes get the below report from the production servers:

    Exception Message:

    Access to the path 'C:\PayrollPortalWWW\PayrollIssueWeb\App_Data\RadSpell\en-US-Custom.txt' is denied.

    Source:

    mscorlib

    Target Site:

    WinIOError

    Call Stack:

    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) at System.IO.StreamWriter.CreateFile(String path, Boolean append) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) at System.IO.StreamWriter..ctor(String path, Boolean append) at Telerik.Web.UI.Dictionaries.FileCustomDictionarySource.AddWord(String word) at Telerik.Web.UI.SpellChecker.AddToCustom(String word) at Telerik.Web.UI.SpellCheckHandler.ProcessAddWordRequest(HttpResponse response, SpellChecker checker, String word) at Telerik.Web.UI.SpellCheckHandler.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


    When I click the Add to dictionary option in Spellchecker for a misspelled word, sometimes the word is added to the dictionary and I can see the word in the text file but sometimes the control just doesn't do anything and Misspelled word menu stays open. What could be the problem?

    Thank you...
  2. Rumen
    Admin
    Rumen avatar
    12851 posts

    Posted 27 Apr 2010 Link to this post

    Hi Eric,

    The problem could be due to insufficient permissions for the en-US-Custom.txt file. Can you please check whether the ASPNET / NETWORK SERVICE account has read / write permission?

    If it has then try the following two suggestions:

    You can change the default dictionary location and move them out of your application folder. For example:

    <telerik:RadEditor ID="RadEditor1" runat="Server"> 
    <SpellCheckSettings DictionaryPath="/common/RadSpell/" /> 
    ...  

    In this case, the /common/RadSpell/ folder can be mapped to a different directory outside of your main web application. As long as the path in DictionaryPath can be mapped to a physical location, the spell check will work.

    Another approach is to implement your own custom dictionary provider. Here is what you need to do:

    1) create a class that implements the ICustomDictionarySource interface. Here is an example:
    public class myType : Telerik.Web.UI.Dictionaries.ICustomDictionarySource 

        #region ICustomDictionarySource Members 
        string _dictionaryPath; 
        public string DictionaryPath 
        { 
            get 
            { 
                return _dictionaryPath; 
            } 
            set 
            { 
                _dictionaryPath = value; 
            } 
        } 
     
        string _language; 
        public string Language 
        { 
            get 
            { 
                return _language; 
            } 
            set 
            { 
                _language = value; 
            } 
        } 
     
        string _customAppendix; 
        public string CustomAppendix 
        { 
            get 
            { 
                return _customAppendix; 
            } 
            set 
            { 
                _customAppendix = value; 
            } 
        } 
     
        public string ReadWord() 
        { 
            //return a string containing a word from the custom dictionary 
            //return null when there are no more words in the custom dictionary 
            return null; 
        } 
     
        public void AddWord(string word) 
        { 
            //implement custom code to add the word in your custom dictionary 
        } 

        #endregion 

    The ReadWord function is called from the spell code as many times as you return a string. When you return null, the spell assumes there are no more words in the custom dictionary.

    The AddWord function is called if the user chooses to add a new word to the custom dictionary.


    2) set the CustomDictionarySourceTypeName in the SpellCheckSettings to the full type name of your custom provider. For example CustomDictionarySourceTypeName="myType, App_Code"


    Regards,
    Rumen
    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. UI for ASP.NET Ajax is Ready for VS 2017
  4. Eric
    Eric avatar
    24 posts
    Member since:
    Jan 2008

    Posted 28 Apr 2010 Link to this post

    Hi Rumen,

    Thank you for your reply.

    I already set the Spell Check Settings using the below code.

    txtComments.SpellCheckSettings.DictionaryPath = GlobalParams.DictionaryLocation

    If I set DictionaryLocation as a network location "\\XXX\YYY\RadSpell" it doesn't work but if I set DictionaryLocation as "~\App_Data\RadSpell" or "C:\XXX\YYY\RadSpell" it works.

    I am using impersonation with identity impersonate and I can Create/Read files from "\\XXX\YYY\Uploads" directory from the same application. So I don't think that's an access problem because the account I use for impersonation has all the read&write permissions for both of the directories and files under them ("\\XXX\YYY\RadSpell" and "\\XXX\YYY\Uploads").

    I don't plan to use custom dictionary provider for now so I'll first try to solve the problem with DictionaryPath.

    Thank you...



Back to Top