4

これはこのページでの私の最初の質問です。まず、初心者のミスと私の英語の悪さをお詫びします。

自分の問題を解決するためのアイデアが尽きていなければ、このようなページで質問することはないでしょう。それが私の最後のチャンスなので、あなたの助けを借りてそれが機能することを願っています。

NHibernateを使用してC#でプログラムを作成し、Oracleデータベースに接続しました(完全に機能しています)。同様のプログラムを作成するように指示されましたが、.exeではなくWindowsサービスで作成しました。

問題は、NHibernateを.exeプログラムのように機能させるためのすべての設定が行われていることです。プログラムをデバッグすると、すべて正常に機能しますが、サービスをインストールして実行するとすぐに機能しなくなります。

私はプログラムで何もしていません。NHibernate接続をテストしているだけです。

例外:

Could not compile the mapping document: Mapping\CSB_Mensaje.hbm.xml
System.IO.DirectoryNotFoundException: No se puede encontrar una parte de la ruta de acceso 'C:\Windows\system32\Mapping\CSB_Mensaje.hbm.xml'.
   en System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   en System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
   en System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
   en System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
   en System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   en System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
   en System.Threading.CompressedStack.runTryCode(Object userData)
   en System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   en System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)
   en System.Xml.XmlTextReaderImpl.OpenUrl()
   en System.Xml.XmlTextReaderImpl.Read()
   en System.Xml.XmlTextReader.Read()
   en System.Xml.XmlCharCheckingReader.Read()
   en System.Xml.XsdValidatingReader.Read()
   en System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   en System.Xml.XmlDocument.Load(XmlReader reader)
   en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader, String name)

スペイン語の例外の一部は、アクセスパスの一部が見つからないと言っています。

この例外は、次のコードを実行しようとしているときにスローされます。

private static void Init(String BBDD)
    {
        Configuration config = new Configuration();
        config.Configure().SessionFactoryName(BBDD);
        config.AddFile("Mapping\\CSB_Mensaje.hbm.xml");
        config.AddFile("Mapping\\CSB_Periodicidad.hbm.xml");
        config.AddFile("Mapping\\CSB_Plantilla.hbm.xml");
        config.AddFile("Mapping\\CSB_Subscripciones.hbm.xml");
        config.AddFile("Mapping\\CSB_Usuario.hbm.xml");
        config.AddFile("Mapping\\CSB_Login.hbm.xml");
        config.AddFile("Mapping\\CSB_Configuration.hbm.xml");
        _SessionFactory = config.BuildSessionFactory();
    }

そしてこれは私のhibernate.cfg.xmlファイルです:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory name="Oracle">
    <property name="connection.provider">
      NHibernate.Connection.DriverConnectionProvider
    </property>
    <property name="dialect">
      NHibernate.Dialect.Oracle10gDialect
    </property>
    <property name="connection.driver_class">
      NHibernate.Driver.OracleClientDriver
    </property>
    <property name="connection.connection_string">
      User Id=CSB;
      Password=Hound2012;
      Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.30)(PORT = 1521)))(CONNECT_DATA = (SID = HL)));
    </property>
    <property name="show_sql">
      true
    </property>
  </session-factory>
</hibernate-configuration>

繰り返しになりますが、ここで何かを尋ねるのは初めてなので、間違いを犯してすみません。どんな助けでも大いに感謝されるでしょう。

よろしく、コール

4

1 に答える 1

4

例外メッセージの次の行は、問題を示しています。

System.IO.DirectoryNotFoundException: No se puede encontrar una parte de la ruta de acceso 'C:\Windows\system32\Mapping\CSB_Mensaje.hbm.xml'.

問題は、ここで相対パスを使用していることだと思います:

config.AddFile("Mapping\\CSB_Mensaje.hbm.xml");

マッピング ファイルへの実際のパスを指定してみてください。

または、マッピング ファイルを埋め込みリソースとしてマークし、NHibernate に、各ファイルの構成を個別に伝えるのではなく、アセンブリ内で見つけられるようにします ( The NHibernate Wikiを参照)。

于 2012-11-07T11:58:42.123 に答える