Having two ODP.NET (ODAC) versions in the same server - odp.net

Some months ago, a colleague of mine installed ODAC 11.106.21 in a server using XCOPY and then he developed many applications that use this client without problems (in test and production windows servers).
Past week, I developed an application under ODAC 11.1.07.20. When I asked him to install these new ODAC version using XCOPY in a different folder and then include my application in the test server, he answered me that I should use ODAC 11.106.21 because he could have troubles with his applications.
So I would like to know:
1) If it is really possible to have two different ODAC versions in one server.
2) If the answer is positive, how can I firmly ensure to my colleague that he will not have troubles with his applications?
3) If the answer is positive, is this necessary to do some kind of configuration in the server?
Thanks!!

You can have multiple versions of ODAC on the same machine, but there are several things to be aware of with regards to which version will be used by each application. This actually applies to all assemblies.
in Visual Studio, if you set Specific Version = True on Oracle.DataAccess.dll, then that application will not use any other version and must be able to find the version it was built against.
whether you deploy the DLL with your application or expect it to be in a certain place or in the GAC.
there is a specific search order for finding dependent DLLs, and it's quite involved, so read this MSDN topic.
The short answer is that there are two easy ways to make sure your application uses the exact version of Oracle.DataAccess.dll you want it to (this applies in most cases where everything else is default):
Set Specific Version to True;
Deploy the DLL with your application and have it reside in the application directory, OR ensure that the DLL is in the GAC.
In your specific case, your colleague may have a valid concern: If his applications which are currently installed are getting Oracle.DataAccess.dll from the GAC, and he didn't set Specific Version to True, then when you install the new ODAC, his applications will start using it (I'm assuming the new Oracle.DataAccess.dll will be installed in the GAC too),

The problem here is not .NET dlls but unmanaged dlls.
I trying to make to work two ASP.NET applications on one server. One is older using ODP.NET 9.x and the new one using the latest ODP.NET. I deployed the newest ODP.NET using xcopy and added the paths to PATH environment variable for the new ODP. Now the old application doesn't work (probably tries to use new dlls). When I remove paths from PATH variable then the new app doesn't work. I found the way to make it work on one server unders IIS on Oracle pages but that didn't work. Maybe because I didn't install newest ODP.NET but just xcopied it. I will have to try it.
What Oracle says about:
Link: http://www.oracle.com/technology/tech/windows/odpnet/faq.html
Many Oracle applications run on Microsoft Internet Information Services (IIS). Previously, IIS was a single process application without the ability to assign a different System Path to each running web application using the same IIS instance. With IIS 6 on Windows Server 2003, IIS supports multiple processes for the same instance. Since each application has its own IIS process, each web application can be assigned a different System Path directory with its own Oracle Home.
Microsoft documentation provides information on IIS worker process isolation and application pools.
To set up multiple active Oracle Homes running concurrently on the same IIS server:
1) Run IIS 6 in worker process isolation mode on Windows Server 2003
2) Deploy one version of the Oracle Client to one application pool and the second version to another application pool. For example, you can have Oracle Client 9.2.0.2 and ODP.NET 9.2.0.2 be used by one application pool. And Oracle Client 9.2.0.4 and ODP.NET 9.2.0.4 can be employed by another application pool. You won't be able to use two active Oracle Homes in the same application pool. Each active Oracle Home must be in a different pool.
3) Set the DLL directory for each worker process to use the appropriate Oracle Home client directory. To do this, within each ASP.NET application, call SetDllDirectory(directory_name) early in the application lifecycle before any Oracle DLLs are called. The SetDllDirectory input variable is the Oracle Home bin directory of the ODP.NET version used. Note: SetDllDirectory is an unmanaged call.

Related

How can I built a standalone windows desktop application ,where I don't need to install any server additionally on client's machine?

I am developing desktop app using wpf mvvm,however I am confused as to how should I proceed with developing standalone application using sqlite,sql server compact etc
If you need a database (really need a database), I suggest using Entity Framework using the code first approach. This can create a local database for the application w/o the need of a database server.
However, strongly consider if you could just use files in the file system. It is amazing how much you can load into memory and if you want this to run on client machine, you likely don't have so much data that you can't just load the data into memory.
SQL Server Compact requires a separate installation step with administrative credentials.
SQLite is a library that can be compiled directly into the application.
In the case of .NET, it is a part of the System.Data.SQLite package, so it is automatically available when your application is shipped with this package (see SQLite deployment for .net application).

Registering an interop dll on Windows Server 2008 R2

I have searched all over StackOverflow and the internet for help with this. This is a very commonly asked question and I have tried everything that I could find and still no success.
The problem is that my company wrote their own encryption dll several years ago. It is now considered obsolete in the company but we are a small branch of a larger corporation and we use this on our classic ASP intranet web site.
We are in the early stages of migrating our web site to a Windows Server 2008 R2 virtual server.
Most every web site I found said the same thing. Go to C:\Windows\SysWOW64 and run regsvr32.exe in a command box. I have done this with the dll in a separate folder and I have done this after the dll has been copied to the SysWOW64 folder.
Each time I get an error message and the messages are not always the same. The message du jour that I am getting is:
The module "Interop.MyEncryptionTool.dll" was loaded by the entry-point DllRegisterServer was not found.
Make sure that "Interop.MyEncryptionTool.dll" is a valid DLL or OCX and then try again.
I do not have the source code of the dll nor do I think anyone in the company has it. I wrote my own encryption dll in VS 2008 in VB.net and it works fine but we decided that even though the company considers their dll obsolete it is still a standard. The company never created an updated version to replace this dll.
At this point I am wondering not so much how to do this but is it even possible. Did 2008 R2 drop compatibility with older Active-X, COM or COM+ dll's?

How to move a windows .net runtime frontend application to the cloud (it uses a local sql server backend database)

I had a engineer design our .net application back in 2009, my guess is that it was coded using visual studio, and all I have is the installer application. We have been using it on our 1 or 2 local client machines very well for the past few years, but now I want to move this front end to the cloud. Instead of installing it as an application on our windows 7 machines.
It is a very simple application used in our small warehouse that keeps track of cargo/shipments etc. It uses Sql Server 2008 Express as a backend which is stored locally.
I know how to get the database in the cloud, their are many options for that, using Amazon or Azure, but how do i get the local client application to the cloud?
I dont have access to the visual studio code, i just have the runtime executable file..
I am sure there is no way to do this, and many of SO users will say i need to re-write the front end.
I have tried to contact the developer and they hav since closed down. Is their anyway i can run this in the cloud?
I welcome all options and solutions!
Thanks.
I believe you have two options for hosting this application:
If you are able to configure the database connection string, you could host the database in the cloud, and distribute the application to your end users. However, you've already stated that you know how to move the database, so I assume this isn't an option.
The only alternative is to run the entire application on a cloud server, and send the user interface to a client using terminal services. This makes it appear as if the application is running locally on the user's computer, while it is actually running on the server.
For an off-the-shelf solution to achieve this, you could consider using Microsoft's RemoteApp Azure service. I'm sure there are other similar offerings available.

Coldfusion COM not registered

First time ever using ColdFusion.
We have a website that uses ColdFusion 9 on our live server. It calls a COM DLL to encrypt certain things. The code on our live server works fine.
Since I may be taking over the project I installed ColdFusion 10 Developer edition on my local machine and copied all the source code and DLL's down to my local machine for testing.
I am getting an error that it can't instantiate the COM object because it is not registered but I KNOW it is registered because the DLL works on other parts of our website that are still in Classic ASP and will run on my local machine. I actually wrote a ASP script inside the the ColdFusion test site on my machine to test the DLL and everything works fine so it IS registered (via regsvr32.exe).
The ColdFusion page was done by an outside company that we are going to be breaking ties with and I don't have the password to their ColdFusion control panel even though it is on one of our servers. I wanted to look at their settings. Is there some setting that I need to set in the control panel on my machine? If there is I haven't found it yet.
Any ideas?
EDIT:
Here is the code:
<cfscript>
objEnc = CreateObject("com", "mycom.myclass");
</cfscript>
Also, I am running the 32-bit version of CF on a Windows 7 Pro 64-bit OS.
EDIT:
Another edit just for some more info:
The Windows 2008R2 server that it runs successfully on is a 64-bit server. So OS shouldn't have anything to do with it.
Should I try to find Version 9 developer edition on adobe's site and see if it works since it matches the CF version on the server? Haven't been able to find that yet and now Adobe just released 11.
After downgrading my local machine to ColdFusion 9 I can now access the COM DLL perfectly. Which is probably for the best since our server is running CF9. My testing will be with same version. Thanks for all you guy's input.
Randy

WCF Server Application Unavailable - how to run application written in .NET4.0 (IIS6+)

I am trying to run simple application (e.g. generated from template by VS.NET 2010) on IIS6.
I changed it to run with .NET 4.0 (its application pool) and checked with regiis (this pool has 4.0). I also changed all possible httpHandlers (svc etc), to run with NET4.0. All possible rights are checked (i think so).
Almost every request results in "Server Application Unavailable" (sometimes it is empty page with -2146232576 (0x80131700) value) and "...Please review this log entry to discover what caused this error to occur." but EventViewer and IIS Log are empty.
Any ideas? Where to find error details?
Do you run any 2.0 apps on the same server? If yes it could be the issue in case they bot use the same application pool. The application tool itself doesn't have any .NET version setting, it's per virtual directory (application). But you can't use the same application pool to run applications with different versions of .NET Framework apps.
Create two seperate app pools one for your CLR 2.0 and CLR 4.0, the older clr can not host both CLRs, there was a similar issue with 1.1 and 2.0.
cheers
A little bit old question, but still could help someone...
If you installed the higher .NET f/w recently, check, if your apps written for lower versions of .NET f/w were not (automatically) moved to new app pool for the higher f/w.
Many years ago something similar happenned to me after f/w 3.5 installation. Then my 3.5 application worked fine, but after any of the 2.0 apps was firstly called, the app pool crashed.
Needed to move every app to corresponding app pool.