September 23, 2018 ·

Sitecore 9 : Error in controller rendering throws Error rendering controller:the current route url is: '{*pathinfo}'. this is the default sitecore route which is set up in the 'initializeroutes' processor of the 'initialize' pipeline sitecore 9

Hello Guyz,
Believe me but I just had the nightmarish situation where I got trapped in this controller rendering issue where it kept on giving me below error

Error rendering controller: the current route url is: '{*pathinfo}'. this is the default Sitecore route which is set up in the 'initializeroutes' processor of the 'initialize' pipeline 

There mainly two reasons for this exception

  • Controller rendering you have used is having either wrong namespace, wrong controller name or wrong assembly name.
  • There is something wrong with System.Web.Mvc.dll

you should first observe your controller rendering configuration, see if namespace or controller name or assembly name are correctly given? this is common issue when we copy and paste the path and it could contain spaces or aeesmbly name could be wrong, if everything looks good there, read further

I tried everything like changing the name of controller, deleting the physical controller and creating It with different name, deleting renderings from sitecore and try creating them again, deleting global.asax file deleting sitecore cache, but I was ending in the same error all the time, and finally one fine moment I was out side my home one small thing clicked me and I run back to my laptop and tried implementing it and it worked !! Phew !!! which is following .

Solution


Well, When I created my visual studio project it added the System.Web.Mvc.dll by default and it was added with the version 5.2.4.0 which is fine but the issue was that sitecore installation was using the version 5.2.3.0

Now because my general practice is that I delete my projects web.config file and also web..config files from the view, and copy it from sitecore's installation, now my solution had config from sitecore which were pointing to 5.2.3.0 DLL and my solution had 5.2.4.0, which could never work and end up in assembly manifest error, if i deploy, as i did not copied it to BIN that error was not there but somehow solution was using 5.2.4.0 when sitecore requested that page or controller/action path, and due to it the route was not working

A small change i did,

  • Deleted the any old reference from bin folder of my IIS site
  • Copied sitecore's System.Web.Mvc.dll and added it as a reference to my project so i downgraded my project from 5.2.4.0 to 5.2.3.0
  • Deleted web.config and copied it from sitecore's instance
And it worked now sitecore is able to find the route and hitting the MVC controller, Phew !!!

Try above tips if you get trapped in similar situation


September 19, 2018 ·

Sitecore 9: System.MissingMethodException: Method not found: 'System.String Sitecore.ContentSearch.Abstractions.ISettings.


Sitecore® 9.0 Platform Essentials for Developers eLearning Lab Module Error

I was recently doing the Sitecore® 9.0 Platform Essentials for Developers eLearning Lab Modules and in last modules I started getting the below error

System.MissingMethodException: Method not found: 'System.String Sitecore.ContentSearch.Abstractions.ISettings.

Out of clue because I did everything as per the guide and end up in error, I figured out from the exception that it has to do with some DLL which is not finding the method the code is trying to reference.

So I backtrack the module and found out that there were two nuget packages were installed and one of them was Sitecore.ContentSearch.dll, So when you publish the site this DLL got overwritten with the existing which was available with existing sitecore installation In your WWWROOOT

I had a back up of the sitecore installation folder from WWWROOT and I took the DLL from that and put replaced it in the WWWROOT folder and to make sure it works now, browse the site and everything started working

May be any of you are facing the same issues, you should have the original DLL from sitecore installation and reference it instead of the nuget package, if the problem still persist (I hope in future this will not be the case with nuget)

Hope it helps !!!

July 26, 2018 ·

office365 license add exception powershell Set-MsoluserLicense


Hello All :),

It's been long time since I have posted anything, I have so many draft posts but I will just need to make them proper and publish, but today I just though to give you all a quick info on office365's strange error while assigning licenses to a user, If you admins or programmers have found this strange error while fire the command Set-MsolUserLicense, it some times generate following error

Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve a list of valid licenses

And this is where all the confusion starts, By reading the error it seems that you are trying to give invalid license? you double check and find out that license or SKU is correct, but it keep giving this error if you fire Set-MsolUserLicense command, Well actually you did not do anything wrong, but the error that office365 gives back is misleading and that needs to be understood, it actually is trying to say is

It is trying to say that, this user already has this license and you are again running the command to assign already available license to that user and that is where office365 complains that it is invalid, actually it is already given to a user. :)

So, next time when you spend time troubleshooting issues like this? Please first check if user already has this license available? It was a small post but hope it will help you save little time.

Happy troubleshooting friends !!!

June 29, 2016 ·

Get specific user information out of lotus notes without traversing all documents

Getting specific user information out of lotus notes

I had the need of reading from lotus notes specific user information, the solution i had before was traversing whole lotus notes document inside $people view and getting one by one document and comparing if this is the document i need But the problem with that approach was 1) It was not proper of having a loop 2) It was too slow and my web service was getting timed out as it was traversing

There is a better way to do it like following

var session = new NotesSession();
session.Initialize(password);
NotesDatabase _serverDatabase = session.GetDatabase(serverName, "names.nsf", false);
NotesView _peopleView = _serverDatabase.GetView("$Users");
// Searching using email, if any document matches with this email string
NotesDocumentCollection tmpDoc = _peopleView.GetAllDocumentsByKey(userMail, false);

// There could be multiple enteries
for (int i = 0; i < tmpDoc.Count; i++)
{
    NotesDocument tmpDoc1 = tmpDoc.GetNthDocument(i);
                    // Take full name of a user when firstname+lastname+email matches
    if (firstName.ToUpper() == Convert.ToString(tmpDoc1.GetItemValue("FirstName")[0]).ToUpper() 
       && lastName.ToUpper() == Convert.ToString(tmpDoc1.GetItemValue("LastName")[0]).ToUpper() 
          && userMail.ToUpper() == Convert.ToString(tmpDoc1.GetItemValue("InternetAddress")[0]).ToUpper())
              // Do your thing here
}

Above you can see i am loading a view called $Users and trying to getAllDocuments having a key, in my example i am passing an email, but you can have anything there and that key would be searched in whole document, so if you are passing a text which could be in many fields, multiple document would be returned containing those matches in different fields, and you can compare you condition to make sure you get the right document out of those multiple returned documents in this way you can avoid traversing through all the available documents and instead find one, i thought it would be helpful for others hence sharing it ;-)

October 08, 2015 ·

Solved !!! - Integrate lotus notes to third parties APP using interop.domino.dll COM API using C#

First of all before writing anything about this integration, i would like to say, i tried...tried..tried...so many times using the COM but couldn't succeeded and there were lot of things which needed to be understood just to make it work, Also the question i had was there is no documentation on IBM for C# COM API, but a good documentation on JAVA and C , so i was also not sure if this DLL would work? or we need some other way like ODBC or xPages or Webservice etc?

But i think "In IT, you should read your intuitions, that is where answer lies, because they are shouting from your experience.", Because i noticed that DLL has all the required classes and properties etc. and it has same methods as shown in JAVA docs on IBM, so i was sos sure this is the DLL that would 200% work

(i went into this thought process because i tried for 3 days without any luck, and later i found domino also has a web service which can be generated from domino designer etc., if i would have gone on that path, i might needed to understand it differently, but i had full trust on my intuition that this DLL has everything and if i make it work and get rid of the error, we are good to go)

just because it was a new system to me and i had no clue what is wrong, but i will try to put everything in here, So anyone out you can also get some information :), I will list down the issues that i faced, what one needs to do to solve, and also let me give you the URL of the code project which sample i used to have that interop.domino.dll, it is here, it is very good sample.


The error while initializing NotesSession class
Retrieving the COM class factory for component with CLSID {29131539-2EED-1069-BF5D-00DD011186B7} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Above is the error i was getting no matter what i do, even if build the app using 32 bit or 64 bit but i was just was not getting rid of that error message and which took a lot of energy out of me, so if you get this error, just skip directly to the SOLUTION section :(

So my first goal was just to get rid of this error and the other challenge was to understand the classes and their properties inside it and methods available etc. but first goal was to get rid of this error, as i never saw lotus notes,i tried to install the latest "Lotus notes client" to see what it contains and what are the terminologies etc. and suddenly my above error just vanished without doing anything, before that i tried to register the class, tried to register the DLL etc but it just did not work, but now it worked and there was no run time error, i was puzzled, Later in my research i realize that even if you have interop.domono.dll referenced in your project, you still need "Lotus notes client" installed on the machine or the server from where you are making a call top lotus notes server.

Solution:
In order to execute your COM calls and use Notes classes inside it, you need to install "Lotus notes client" on that machine, Else it will keep giving you that Class not register error and you will end up going on that track of finding why it gives this error and registering it and 32 bit and 64 bit hell, and by the time you realize you would be on totally another track of the problem solving :).


The goal of this post was just to let you know that even if you have interop, you still need lotus notes client installed, Code samples you can get it from IBM's java examples, sames classes are available in interop.domino.dll

August 05, 2015 ·

HTTP Error 500.19 - Internal Server Error, 0x80070021 while browsing your web app

Hello :) This is a quick draft as i faed this issue many times and every time i wondered what is the actual solution to it, is it something needs to be changed on web.config? or needs to be changed something in upper level config files as i was getting the same answer from everywhere

But the thing is why it works in other fresh machine with same configuration and why not on this? possible solution are below (apart from changing on config file level or unlocking config elements)
  • If you are using WCF make sure you have turned on the feature called "http activation" is turned on - It worked for me
  • If you are using windows authentication, make sure it is installed and turned on
  • run "c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i"

I know there are many reason which can cause this but i just drafted which worked for me as i was working with windows auth and WCF so may be if you have the same kind of scenario, it might help without locking/unlocking things from web.config
Could not resolve mscorlib for target framework '.NETFramework,Version=v4.0'. This can happen if the target framework is not installed or if the framework moniker is incorrectly formatted wcf update service reference issue

April 02, 2014 ·

Could not resolve mscorlib for target framework '.NETFramework,Version=v4.0'. This can happen if the target framework is not installed or if the framework moniker is incorrectly formatted wcf update service reference issue

I am feeling little good about writing this blog as this might help many, as i searched for the suggestion on the net for couple of days but may be i didn't google it properly (I can not say google does not have solution :) ), but finally if ends well everything is well, i got the solution of this nightmare kinda issues



The Issue

I faced this issue and i saw on the net the plenty like me had the same issue, that one fine morning your service reference stopped updating, or you can't do anything with them, which were working fine earlier, You can't update service reference, you can't delete them, once you remove everything and give the reference again, the error fires back again and you can't repeat the same procedure of deleting and inserting the reference over and over



See the following screen shot



Above is the screen shot which i kept on getting and searched for the solution with best of my googling capabilities untill i got the solution which is below, Before that there were many solutions like the classe names which WCF (wsdl) generates were larger than 256 characters, But i could not use that solution for some reason, other solutions were re intalling some of the MS tools and re installing them, Below is the solution which worked for me and i am posting so other can also make use of it

Solution

Creating a batch file instead of manually adding service reference (WCF reference) will only generate the wsdl files which is required to access the data of it and functions inside it and via which the above error will be gone

@ECHO OFF

set UIProjectServiceRefPath =..\..\MyApplication\ServiceReferences

set SVCUTILPATHValue =C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools

ECHO Generating CommonService.CS
"%SVCUTILPATHValue %\svcutil.exe" /o:"%UIProjectServiceRefPath %\CommonService.cs" /reference:"c:\MyDomainService\bin\Debug\Domain.dll" /serializer:Auto /edb /ct:System.Collections.Generic.List`1 /ixt  /namespace:*,MyService.CommonService http://localhost/MyService.BLL/CommonService.svc?wsdl

set /p delBuild=press any key to exit:

  • Create a .bat file (batch file) like above, very first line after echo is where you want to have those class files to be created, this would be same path where your WCF service reference were getting created, so replace your path having that in mind
  • Second Echo statement is your actual service file which you want to generate, now if you have 3 services, you will these type 3 echo statements with their respective paths, here /reference is any reference DLLs your WCF might be using, so give those DLLs path there, you can have multiple /reference nodes followed by one another
  • /namespace is via which you will be referencing your classes to create their objects, and .svc is your hosted WCF service, the path which you were using to add service reference.


Now remove your existing "Service reference" folder which you have generated from previous WCF manual add service reference from windows explorere and also from your solution, and doucle click this file, it will generate "ServiceReference" folder at the smae place and inside that it will put above .CS files which is in .dat file



Your are good to go, go to your solution include this folder and build your project, if you have configured it properly it will build with no error, and now whenever you want to update the service reference, just double click this file to generate new WSDLs



Feel free to comment here in case of any doubt, I would like to mention here the valuable help from http://k-sharp-net.blogspot.in/ (Kamlesh samnani, very good colleague of mine)

March 28, 2014 ·

401.1 Unauthorized with windows authentication error code 0xc000006d

How many of you have faced this hosting issue when you do everything what it takes to run the site with windows authentication but still you are getting the same error again and again?



If you think you also have faced the same issue and you tired of reading MSDN KBs for it and still have not found the issue (If KB has solved the issue, well and good, if not you can try this trick),Please Read below



Typical scenario


In typical hosting with IIS, i did every possible things like enabling windows authentication, changing it in web.config, configuring connection pool, authorization rules, it asks me for window authentication login and despite of entering correct credentials it always fails and keeps on asking for login, and when pressed cancel it gives 401.1 with 0xc000006d error code

Solution (Which worked for me at-least after trying for almost 6-9 hrs)


You need to change the Loop Back Check in registry so that it allows the host names which you are giving in url are allowed and authorized, Following are the steps



  • The solution is some registry hacking to avoid loopback check:
  • Using regedit, navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  • Add a new Multi-String Value to MSV1_0 and name it BackConnectionHostNames
  • Add the host names you wish to use. In my case, "test.mytestsite.com".
  • Restart the IIS.




I got this important information from http://falunbyday.blogspot.in/2013/02/windows-authentication-fails-on-local.html,It was life saver




Thanks, Enjoy

March 13, 2014 ·

File upload reference on client side for client side processing like crop image or anything

I have had a requirement were i needed to include the crop functionality in already developed file upload control, requirement was user should be able to crop the images he selects and later on when he finalize the selection, and that file should get saved on server so next it is available to user
Here our tradition approach is always like, we upload the file on server on some temporary location, so that it is available for cropping to user, and he can apply cropping on client side and send that to server with its crop selection and on server side we can process that image and crop on server side with already uploaded image and save so only cropped version will be saved and use that image
There is another approach which can save us from doing the upload first, crop and later on again save that image, the process is like following, Find the following code



Consider following is my upload control










Now,Consider following javascript registered which will take the file reference on client side and return the byte array of image and directly show in preview on the fly and very fast, as it is yet not uploaded on server, so process is very fast


function getImageFromClientSide(file) {

    var reader = new FileReader();
    var image  = new Image();
  
    reader.readAsDataURL(file);  
    reader.onload = function(_file) {
    image.src    = _file.target.result;              
    image.onload = function() {
           var w = this.width,
           h = this.height,
           t = file.type,                           
           n = file.name,
           s = ~~(file.size/1024) +'KB';
           $('#uploadedImagePreview').attr('src',this.src);
        };
    };
    
}
$("#imgSelector").change(function (e) {
    getImageFromClientSide(this);

});



As you can above, what it is using is FileReader method of DOM and reading a file from client's computer, and it will convert image into byte array of base 64, now you can treat this as a string and you can send this image to server side using ajax or anything as a string, and on server side (i am using asp.net c#, and you can use following


byte[] imageBytes = Convert.FromBase64String(imageByteArray); // Here imageByteArray is my string variable which contains the byte array string sent from client side 
   TypeConverter tc = TypeDescriptor.GetConverter(typeof(Image));
   Image OriginalImage = (Image)tc.ConvertFrom(imageBytes))



As this whole process is working on client side, this is very fast in performance, I got the reference of my search and r&d from http://jsbin.com/oTAtIpA/490/edit url and i implimented it from the same, i hope this will help some of you coders
Thanks you !!!
Same old file reference in project when 'Add reference' issue

March 15, 2013 ·

Same old file reference in project when 'Add reference' issue

Here is the "STUPID" scenario i came across,Following is the problem i had

Issue
I had one folder in my computer and it had two different version of dlls,My project already had reference of one of the dll,But now i wanted the reference of other dll,I simply deleted the old reference and tried to add new reference of the other file by selecting it,It was added but was showing old version when i tried to see its property ,I tried multiple times with multiple ways but no luck

Solution


First just check out the folder structure i had in my project,Here "Dlls" is the folder from which i wanted to add another file


You can see the "Dlls" folder is included in the project, And thanks to "Mr. Zakir Rana", One of project partner who insisted me to try excluding this folder and adding reference, It sounded foolish to me as its physical folder after all no matter if it is included or not,But i was surprised as soon as i excluded the folder,And it started taking new reference !!!

February 20, 2013 ·

Ajax call inside for loop issue and solution


Hello people, This post is regarding real day to day issue in coding and its resolution, It sometimes looks small issue but when it starts eating your time you start getting feeling that its no more smaller one, Here goes the issue

As the title of the blog suggests, When you are making AJAX calls inside loop, It is finitely possible that inside loop when the call is made, It takes time to get the result back to client side and by that time loop has already ended and counter has reached to limit and you end up thinking how to keep track of the request, it should get the correct index in "Success" method of $.ajax call, Otherwise it will keep on giving you one count higher than your total count of loop, There can be many way as we know in our world but below is one of the good solution to it

Solutions
See below code for an example

for (var i = 0; i < groupCount.length; i++) 
{
                !function (i) {
                    $.ajax({
                        type: 'POST',
                        url: ,
                        data: data,
                        dataType: "json",
                        success: function (respons) {
                            // Do some action
                            
                        },
                        error: function (err, para1, parra2) {
                           // Do some action 
                        }
                    });
                } (i);

Here we can see we have wrapped the ajax call into !function(), It will make sure that your ajax call works, no matter what !!!, One more dirty fix is that we can change the property called async=false in $.ajax parameters but that does not serve the purpose as when we use ajax it has to be async.

Small but helpful !!!

January 08, 2013 ·

Facebook Graph API calls for facebook integration

FACEBOOK the world of it's own,But it sounds good if you get its power in your site,Photos,Status,Like,Commenting,Facebook albums, In short you can simply go and create your app which does everything for you without even going on to facebook

Facebook has its very superb API which you can find on developer.facebook.com, You can download full binaries to be coded in C# but i will skip that and put that on readers to explore as and when you have time,Lets talk something short and sweet

Facebook Page
Here i am only going to talk about the get API calls,That means only things which only get the data from any public page,Say you have a page on facebook for your business and you want the data from your facebook page to be shown onto your website,You can use these calls,Fast,Easy and Fun,Lets get started

Say i have a photography page on my facebook or any other page,You can get its photo albums and its photos by following code,Some of the things required to make a call are following

  • Unique Id or name of the facebook page
  • Facebook Graph API url on which you will make a http request and wait for the response
  • Each call are different (i.e photos,albums etc,Depending on your requirement) so proper URL of those calles

The Calls
Lets say i want to get the basic details of my FB page,like it's description,cover photo,profile pic,so following is the url you would be using

NOTE: Here i am using my photography page to show,You can replace the page name with yours

Get the FACEBOOK page basic info
https://graph.facebook.com/147326062077207

Try hitting above url into browser and you will get an idea what you would be doing,As it returns well formed JSON string and you will make use of that JSON and display the things
Get the list of photo albums on your page
https://graph.facebook.com/147326062077207/albums

Get list of photos into specific album

From above url you will get list of albums with their album id,and in below url you will pass that album id to get photos inside it

https://graph.facebook.com/153930304750116/photos
Getting album cover photo to show

From above url you will get list of photos for particular album,and if you see its JSON string,The 'picture' property is thumbnail preview of the cover photo, So you can take that 'picture' property and show that image from FACEBOOK's CDN.

There are many other useful properties and functions with GET and POST request,I will be covering them in next blog post, Enjoy playing with it,And do provide feedback !!!