2009-05-21 2 views
2

Избиение головы против стены здесьСтранное исключение выходит из OdbcConnection.Open()

Мы являемся ISV и сотни компаний, использующих наше программное обеспечение без каких-либо проблем. Программное обеспечение Winforms/C# на .NET 2.0.

Один из наших клиентов установил наше программное обеспечение, и он падает при запуске на всех своих машинах, кроме ноутбука одного парня, где он работает нормально.

При вызове OdbcConnection.Open(), мы получим следующее исключение:

The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception. 
    at System.Transactions.Diagnostics.DiagnosticTrace.get_Verbose() 
    at System.Transactions.Transaction.get_Current() 
    at System.Data.Common.ADP.IsSysTxEqualSysEsTransaction() 
    at System.Data.Common.ADP.NeedManualEnlistment() 
    at System.Data.Odbc.OdbcConnection.Open() 
    at OurCompany.OurForm.connectionTestWorker_DoWork(Object sender) 

Это имеет InnerException:

Configuration system failed to initialize 
    at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) 
    at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) 
    at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) 
    at System.Configuration.ConfigurationManager.GetSection(String sectionName) 
    at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName) 
    at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() 

Google просто говорит «app.config синтаксически неправильно, восстановить его «но тот же app.config отлично работает на сотнях других машин.

Вот app.config, в соответствии с просьбой:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="OurApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.diagnostics> 
    </system.diagnostics> 
    <applicationSettings> 
    <OurApp.Properties.Settings> 
     <setting name="OurApp_WebServices_OurServiceName" serializeAs="String"> 
     <value>http://ourdomain.com/OurService.asmx</value> 
     </setting> 
    </OurApp.Properties.Settings> 
    </applicationSettings> 
    <appSettings> 
    <add key="WorkflowEngine" value="old" /> 
    <add key="ProductID" value="3" /> 
    <add key="EnableMigrationWizard" value="false" /> 
    <add key="UseAlternativeFtpPort" value="true" /> 
    <add key="FeedbackWhileConnecting" value="true" /> 
    </appSettings> 
</configuration> 

Ремонтных в .NET Framework не исправил. У меня полная потеря. Есть идеи?

+1

можете ли вы предоставить конфигурационный файл для просмотра? –

ответ

0

Решил это, перезаписав machine.config с известной рабочей копией с другой машины на том же уровне SP/patch.

3

Проверьте файл machine.config и user.config. Наряду с app.config, это 3 that make up the config sections.

Отражатель показывает EnsureInit имеет 2 исключения пути:

catch (Exception exception) { 
    this._initError = new ConfigurationErrorsException(SR.GetString("Config_client_config_init_error"), exception); 
    throw this._initError; 
} catch { 
    this._initError = new ConfigurationErrorsException(SR.GetString("Config_client_config_init_error")); 
    throw this._initError; 
} 

Поскольку второй будет обрабатывать только non-CLS exception, я предполагаю, что вы удара первый. Если это так, вам, вероятно, придется рекурсивно пройти InnerException, чтобы получить полную информацию.

+0

Интересно, что тем временем наши парни поддержки полностью удалили и переустановили .NET, и приложение начало работать. Возможно, этот удаленный файл machine.config и скопирован в новый. Логично тогда было бы разумно, что эта установка перестанет работать снова в какой-то момент в будущем, если какой-то автоматический процесс перепишет machine.config на своих машинах с чем-то, что .NET принимает исключение (не предназначенное для каламбура), что наше приложение бьет. Время покажет ... – tomfanning

+0

О, я испек еще одну сборку, которая также захватывает следующий уровень InnerException, если это доступно, мы увидим, что утром вернется на другую их машину ... – tomfanning

+1

@ id.tomfanning .eu - Я бы захватил каждое внутреннее исключение, пока оно не станет нулевым, особенно в удаленной ситуации. Не знаю, сколько уровней оно падает. В противном случае вы просто будете выпускать ежедневные сборки, чтобы получить ошибку нижнего уровня. –

0

Для справки о будущем в будущем у меня была эта проблема с локальным приложением, которое я разрабатывал на своем рабочем столе, и обнаружил, что проблема в том, что я ошибался. Как только это было исправлено, он снова стал очарованием.

0

У меня возникла такая же ошибка при попытке открыть соединение OLE DB с ASP/VB.NET 3.5 SP1. Если я добавлю свой URL-адрес в список доверенных сайтов в IE, ошибка исчезнет, ​​и соединение откроется успешно. Я не знаю, зафиксирует ли это в других браузерах.

+1

Huh- какой?Изменение настройки на клиенте приводит к тому, что исключение произойдет или не произойдет на сервере? – tomfanning

Смежные вопросы