We are using Aspose.Pdf (Version=10.5.0.0) to Combine Multiple PDF’s into Single PDF
and while Setting The License file, we are getting below error.
We tried setting up the License file to read from the
Physical file as well as File Stream but we are get the same error. This is
intermittent error and the occurrence is not assured and comes randomly in the
server.
Usually the issue gets resolved by doing App Pool Recycle
and IIS reset which is not an feasible option always on production servers.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
This issue was identified in older version of Aspose.pdf so
we went with the Upgrade version hoping that it was fixed in latest versions.
Can you take a look at this issue.
Error 1:
System.NullReferenceException: Object reference not set to an
instance of an object. at ?
..?(Stream ) at Aspose.Pdf.License.SetLicense(Stream stream)
Set Licence Memory stream failed
System.IndexOutOfRangeException: At most 4 elements (for any
collection) can be viewed in evaluation mode. at
Aspose.Pdf.PageCollection.get(Int32 ) at Aspose.Pdf.PageCollection.Add(Page , ?
) at Aspose.Pdf.PageCollection.Add(ICollection , ?
)
There seem to be multiple posts on this for older versions. The closest seems to be:
It appears that related query is posted here and we have already replied it. Please try following the instructions shared in other thread and in case you still face any issue, please feel free to contact.
Looks like the other forum thread is marked private through another username. However I am copying the post contents here.
Recently some customers also encountered license initialization issue where license was not being initialized and in order to resolve this problem, a hotfix of Aspose.Pdf for .NET 11.1.1 was released. Please try using the latest release and in case you still face any issue or you have any further query, please feel free to contact.
Thanks for your inquiry. Please note above suggested fix addressed some specific scenario. Please share your license file via email as suggested here and license implementation code, so we will look into your issue and will guide you accordingly.
Thanks for sharing the license file. I have tested your license and its working fine at my end. It seems it is license implementation issue in your application.
It is suggested to set license in some Application Level event. When you will set the license in application level event/scope, it will remain valid till the lifespan of application. Please try to set license as per your application structure and share the results.
If you are developing an ASP.NET application, you can call License.SetLicense from the Global.asax.cs (Global.asax.vb) file, in the Application_Start protected method. It is called once when the application starts. Do not call License.SetLicense from within Page_Load methods since it means the license will be loaded every time a web page is loaded.
If you are developing a Windows Forms or console application, call License.SetLicense in your startup code, before using Aspose.Pdf for .NET classes.
If you are developing a class library, you can call License.SetLicense from a static constructor of your class that uses Aspose.Pdf for .NET. The static constructor will execute before an instance of your class is created making sure Aspose.PDF for .NET license is properly set.
in case of WCF service, depending upon its hosting:
- if it is custom ServiceHost - then you can set license in service host start event - if it is IIS - then set license can be called in Global.asax
I’m sorry, but this is not an application problem. We continue to face this on the recommended upgrade version. Please listen to the voice of your customers. The fact that you can load the license is simply due to the fact that you are not testing under a multi-threaded scenario with proper load.
For all others interested, this appears to be a race condition inside ASPOSE related to both reading and writing of the license. Since the license appears to be static, we have mitigated much of the issue by putting locking semantics around setting of the license, and only doing it during application startup. Note that this does not fix the problem, it only reduces the frequency.
We are sorry for the inconvenience. As stated above that it seems license implementation logic issue in your application, upgrading to latest version will not fix it automatically. We will appreciate it if you please share a simple application here to reproduce the issue it at our end. So we will guide you accordingly.
Furthermore, please note we have observed the same exception in multi-threaded environment. The issue arises when we try to use a document in more than one threads. Aspose APIs are multithread safe as long as only one thread works on a document at a time. Different threads can safely work on different documents at the same time. So it is recommended to set a license once per application or process
We are running version 17.1 and still running into this issue. Up until this point it had only been a minor annoyance. Sometimes when deploying we would just have to restart the application. However, last night the application got restarted on its own and was completely down until we discovered the licensing error this morning.
We are calling SetLicense on application startup as suggested. This happens as our PDF generator class is instantiated and added to the IOC container. Within the ConfigureServices method of the Startup class.
Can you please share a code sample outlining a safe way to implement this in a ASP.NET core application?
@czielin,
Kindly create a small web application which reproduces this problem in your environment, and then send us its Zip file for the testing purposes. We will investigate and share our findings with you.
In the process of putting together a project to reproduce the issue I believe I was able to fix it. I haven’t tested it in production, but putting the license check in a static constructor seems to get rid of the issue when testing locally. I will follow up if the issue pops up again in production.
I figured I may as well still post my project to reproduce in case you’d like to make this a bit more user friendly in future releases, or for someone else who may run into this thread in the future.
This is a basic web application that reproduces the issue when the index action of the application is executed multiple times simultaneously as the application is starting up. The solution, again, was to move the license check from the instance constructor to a static constructor.
It is nice to hear from you that the problem has been resolved locally. Please deploy the code change in the production environment and let us know if you come across any issue. Please note, you just need to set license once per application or process for each Aspose library. When you will apply license as per application or process level, then you do not need to apply license again till the lifespan of the application. We recommend our clients to apply license in some common area of the application like application start event. However, it is not harmful to apply license multiple times.
To be clear, your advice to set the license once per application appears to be sound (at least as far as I’ve been able to reproduce with testing). However, applying the license multiple times IS indeed harmful IF it is done simultaneously on multiple threads. As the included project shows. It will result in a NullReferenceException as the original poster on this thread noted, and all subsequent calls to the Aspose component will fail until the application is restarted.
So perhaps it’s safest to not tell people it’s OK to apply it more than once. Further, it would be nice if the license call were either made truly thread safe, or if multiple calls to set the license is disallowed altogether. Perhaps throw an exception if the license is attempted to be set more than once so the issue can be easily caught before it becomes a difficult to track down race condition that crops up sporadically in production. Will likely save significant time for your customers who find themselves in the same boat as myself.
If you are facing the null pointer error, then kindly create a small project application which reproduces this error in your environment, and then share a Zip of this project. We will investigate and share our findings with you.
Aspose.Pdf API is multi-threaded safe as long as only one thread works on a document at a time.
We are facing Microsoft.DotNet.Props was not found error in our environment when we tried to open your project. Please let us know the environment details, including Visual Studio (name & version) and some handy information which could help us to fix it. Meanwhile, we are investigating this error and will let you know once we are able to run your project in our environment.
I’m not familiar with that error. I used Visual Studio 2015 to create the project. You will likely need to make sure you have the version of the SDK specified in global.json installed on you machine (or change the global.json to match the SDK version you do have installed).
You will also need to add an Aspose PDF license file (“Aspose.Pdf.lic”) back into web project. I didn’t want to publicly post our license file.