Ошибка ODP.NET в IIS: конец сеанса сетевого сеанса ORA-12357
Я пытаюсь развернуть приложение MVC на сервере IIS с подключением к базе данных Oracle. Для этого я скачал расширение ODAC для Visual Studio 2013, а также использовал Nuget для установки в проект последней версии управляемого клиента ODP.NET. На моей машине для разработки также установлен клиент Oracle (т.е. я могу запускать SQL Developer на своем компьютере разработчика), но из того, что я прочитал, ODP.NET не должен требовать клиента Oracle на сервере. Тем не менее, приложение отлично работает на моем компьютере разработчика, но при развертывании на сервер я получаю ошибки и не могу заставить работать любое соединение Oracle. До сих пор я не могу найти никакой полезной информации о том, что вызывает ошибки или как обойти это.
Среда: Visual Studio 2013 Update 5 на 64-битной Windows 7, развертывание на Windows Server 2008 IIS 7. У меня нет прав администратора на окне IIS, оно заблокировано. Администратор сервера изо всех сил старается изо всех сил помочь, но он не знает Oracle, и я знаю, едва ли достаточно, чтобы быть опасным. Все локальные разработчики Oracle используют Java на серверах Linux, так что я странный парень.NET/Windows без внутренней поддержки. База данных Oracle - 11.2.0.3.0. Веб-приложение находится в пуле 64-разрядных приложений.
ВАЖНО: Клиент Oracle не установлен на коробке IIS. Мы не уверены, должен ли быть установлен отдельный клиент Oracle, мои показания указывают, что нет, но я могу ошибаться.
Что мне нужно: в идеале проект, который может быть развернут на произвольном сервере IIS и подключен к моей целевой базе данных Oracle, без необходимости установки каких-либо компонентов / клиентов Oracle на сервере. Я хочу быть настолько автономным, насколько это возможно, чтобы минимизировать влияние на сервер, а также быть на 100% ответственным за управление конфигурацией моего приложения. Если я не могу быть полностью автономным, мне нужно иметь возможность создавать письменный документ с повторяющимися шагами для настройки и развертывания на новом сервере IIS по желанию, с минимальным воздействием на сервер и администраторов Oracle. Entity Framework был бы действительно хорош, но не обязателен - мое "настоящее" приложение (это просто всплеск для проверки соединения) в настоящее время использует объекты OleDbDataReader внутри доменных репозиториев, и я заменю их на OracleDataReader после подключения ODP.NET. работает правильно.
Предположение: В настоящее время я рассматриваю следующие причины ошибок ниже. Но я не знаю, какова реальная причина, поэтому я не знаю, где сосредоточить свои усилия.
Серверу нужны установленные компоненты. Если да, то какие?
Сервер заблокирован брандмауэром или не включен в белый список сервером базы данных. Брандмауэр не должен быть проблемой для администратора сервера, не уверен насчет белого списка базы данных.
?? Что-то другое??
Ниже приводится краткое изложение того, что у меня есть и что я получаю. Каждое действие сопровождается сообщением об ошибке, которое оно генерирует.
Каждый из них отлично работает на моем компьютере разработчика - все ошибки находятся на сервере.
/ Главная / Индекс
Это практически копия / вставка из этого руководства по Oracle:
public ActionResult Index()
{
string conString = "User Id=myuserid;Password=mypassword;" +
"Data Source=mydomain.foo:1521/myservicename; Pooling=false;";
OracleConnection con = new OracleConnection();
con.ConnectionString = conString;
con.Open();
return Content("OK");
}
Сообщение об ошибке: ORA-12537: сетевой сеанс: конец файла
ORA-12537: Network Session: End of file
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: OracleInternal.Network.NetworkException: ORA-12537: Network Session: End of file
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[NetworkException (0x30f9): ORA-12537: Network Session: End of file]
OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len) +294
OracleInternal.Network.ReaderStream.ReadwithCrypto(OraBuf OB) +127
[NetworkException (0x80004005): ORA-12570: Network Session: Unexpected packet read error]
OracleInternal.Network.ReaderStream.ReadwithCrypto(OraBuf OB) +1188
OracleInternal.Network.ReaderStream.Read(OraBuf OB) +88
OracleInternal.TTC.OraBufReader.GetDataFromNetwork() +274
OracleInternal.TTC.OraBufReader.Read(Boolean bIgnoreData) +46
OracleInternal.TTC.MarshallingEngine.UnmarshalUB1(Boolean bIgnoreData) +16
OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse() +86
[OracleException (0x80004005): ORA-12570: Network Session: Unexpected packet read error]
OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +5643
OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +1381
OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword) +1583
Oracle.ManagedDataAccess.Client.OracleConnection.Open() +3837
OracleClientSpikeMvc.Controllers.HomeController.Oracle() +65
lambda_method(Closure , ControllerBase , Object[] ) +79
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +242
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +12
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +139
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +112
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +452
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +15
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +37
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
/ Главная /Oracle
public ActionResult Oracle()
{
var connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservicename)));User Id=myuserid;Password=mypassword;";
var conn = new OracleConnection(connectionString);
conn.Open();
var command = conn.CreateCommand();
command.CommandText = "select sysdate from dual";
command.CommandType = System.Data.CommandType.Text;
var reader = command.ExecuteReader();
if (!reader.HasRows)
return Content("No rows returned");
reader.Read();
return Content(reader["sysdate"].ToString());
}
Сообщение об ошибке: ORA-12537: сетевой сеанс: конец файла
ORA-12537: Network Session: End of file
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: OracleInternal.Network.NetworkException: ORA-12537: Network Session: End of file
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[NetworkException (0x30f9): ORA-12537: Network Session: End of file]
OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len) +294
OracleInternal.Network.ReaderStream.ReadwithCrypto(OraBuf OB) +127
[NetworkException (0x80004005): ORA-12570: Network Session: Unexpected packet read error]
OracleInternal.Network.ReaderStream.ReadwithCrypto(OraBuf OB) +1188
OracleInternal.Network.ReaderStream.Read(OraBuf OB) +88
OracleInternal.TTC.OraBufReader.GetDataFromNetwork() +274
OracleInternal.TTC.OraBufReader.Read(Boolean bIgnoreData) +46
OracleInternal.TTC.MarshallingEngine.UnmarshalUB1(Boolean bIgnoreData) +16
OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse() +86
[OracleException (0x80004005): ORA-12570: Network Session: Unexpected packet read error]
OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +5643
OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +1381
OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword) +1583
Oracle.ManagedDataAccess.Client.OracleConnection.Open() +3837
OracleClientSpikeMvc.Controllers.HomeController.Oracle() +65
lambda_method(Closure , ControllerBase , Object[] ) +79
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +242
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +12
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +139
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +112
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +452
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +15
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +37
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
/ Главная /EntityFrameworkTest
При этом используется контекст EF Code-first, сгенерированный из базы данных:
public ActionResult EntityFrameworkTest()
{
using (var ctx = new MyContext())
{
var list = ctx.MyModel.OrderBy(m => m.MyField).ToList();
return View(list);
}
}
Сообщение об ошибке: истекло время ожидания запроса на подключение
Connection request timed out
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Oracle.ManagedDataAccess.Client.OracleException: Connection request timed out
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[OracleException (0x80004005): Connection request timed out]
OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +5643
OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +1381
OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword) +1583
Oracle.ManagedDataAccess.Client.OracleConnection.Open() +3837
Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.GetDbProviderManifestToken(DbConnection connection) +234
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +118
[ProviderIncompatibleException: The provider did not return a ProviderManifestToken string.]
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +459
System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +40
[ProviderIncompatibleException: An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.]
System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +126
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +83
System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection) +327
System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +118
System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +94
System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +248
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +543
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +26
System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +72
System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +21
System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +64
System.Linq.Queryable.OrderBy(IQueryable`1 source, Expression`1 keySelector) +85
OracleClientSpikeMvc.Controllers.HomeController.Index() +282
lambda_method(Closure , ControllerBase , Object[] ) +79
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +242
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +12
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +139
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +112
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +452
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +15
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +37
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
Web.config выдержки
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<connectionStrings>
<add name="MyContext" connectionString="DATA SOURCE=mydatasource;PASSWORD=mypassword;USER ID=myuserid" providerName="Oracle.ManagedDataAccess.Client" />
</connectionStrings>
<dependentAssembly>
<publisherPolicy apply="no" />
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
</dependentAssembly>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
Что нам нужно сделать, чтобы устранить эти ошибки и подключиться к базе данных Oracle с сервера? Любая помощь очень ценится, спасибо!