- PR -

非接続型 ADO.NET アプリケーションで XML を使用する方法

1
投稿者投稿内容
est
会議室デビュー日: 2007/08/03
投稿数: 12
投稿日時: 2007-11-01 14:42
現在、C#(Microsoft Visual Studio 2003)にてフォームアプリケーションを開発しています。
XMLを読み込む処理があるため、XmlTextReaderメンバを使用し、
その結果をDataSetに代入したいです。

XMLファイルは、ローカルフォルダに存在するものを読み込みます。
完全にローカルで動作させるため、非接続型の処理をさせたいです。

下記URL(MSDN)の「非接続型 ADO.NET Windows アプリケーションを作成する」という箇所を見ましたが、 [Web 参照の追加] を行う際、「http://localhost/ProductsService/Service1.asmx 」を指定するように記述されています。
しかし、当方の環境にはこのasmxで終わる拡張子のファイルは存在しません。

http://support.microsoft.com/kb/307224/ja

完全にローカル環境のみで動作させる際の、
XML読み出し処理についてご教授いただきたいと思います。
よろしくお願いします。
IIJIMAS
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 77
投稿日時: 2007-11-01 14:50
こちらではないでしょうか。
Visual C# .NET を使用して XML データをデータセットに読み込む方法
http://support.microsoft.com/kb/311566/
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-11-01 14:54
一番簡単な方法は、最初はデータベースに必要なデータをいれておいて、そこから
ウィザードを使ってDataSetをつくり、そのDataSetをXML形式でテキストに保存して
しまうことだと思います。
この方法で作成したXMLファイルならDataSetからメソッド一発で直接読み込んで
展開できます。
est
会議室デビュー日: 2007/08/03
投稿数: 12
投稿日時: 2007-11-01 15:35
お返事ありがとうございます。

説明が足りなくてすみません。
補足させていただきます。

XMLを読み込む処理があるため、XmlTextReaderメンバを使用し、
その結果をDataSetに代入するところまでは実装しております。

しかし、PCの環境によっては、"The underlying connection was closed: An unexpected error occurred on a send." (Webservices) というエラーが発生することがあるのです。

(エラーメッセージが英語なのは、クライアントのPCに英語版の.NET Frameworkがインストールされているためです)

このエラーを調べていくうちに、DataSetに原因があり、非接続型の処理を行っていないからではないか?と疑っています。

この点についても、ご教授いただきたいと思います。
よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-11-01 16:25
DataSetを使っているだけでWebサービス関係のエラーがでるなんてことは考えられません。
何か他にWebサービスを呼び出してる処理とかないんですか?
est
会議室デビュー日: 2007/08/03
投稿数: 12
投稿日時: 2007-11-01 16:50
>どっとねっとふぁんさま

DataSetだけで、他にWebサービスは使っていません。
プログラムが動作しなかったマシンから得られた、
エラー ダイアログのメッセージをコピーします。
太字の部分を見て、DataSetが怪しいのではないかと疑っていました。

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Net.WebException: The underlying connection was closed: The request was canceled.
at System.Net.HttpWebRequest.GetResponse()
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.Schema.DtdParser.ParseDocTypeDecl()
at System.Xml.Schema.DtdParser.Parse()
at System.Xml.XmlTextReader.ParseDtd(XmlScanner scanner)
at System.Xml.XmlTextReader.ParseTag()
at System.Xml.XmlTextReader.ParseRoot()
at System.Xml.XmlTextReader.Read()
at System.Xml.XmlReader.MoveToContent()
at System.Data.DataSet.ReadXml(XmlReader reader, Boolean denyResolving)
at System.Data.DataSet.ReadXml(String fileName) 

at 【プロジェクト名】.【フォーム名】.【フォーム名】_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2407
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
Lyra
Assembly Version: 1.0.2861.28772
Win32 Version: 1.0.2861.28772
CodeBase: file:【EXEファイル】
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2407
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Data
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.data/1.0.5000.0__b77a5c561934e089/system.data.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------

************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.


プログラムが動作しなかったマシンのスペックですが、
OS : Windows XP Professional SP2
.NET Framework 2.0, 1.1(英語版)です。


Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-11-01 18:06
スタックトレースからの推測ですが、その XML ファイルとやらに DTD の外部サブセットが定義されてるんでしょうかね。
それなら、
  1. 必要な DTD をローカルのどこか(リソースとか)に保持しておく
  2. XmlUrlResolver の派生クラスを用意して要求をローカルリソースに振替えるようにする
  3. XmlTextReader を作って上記のリゾルバを設定
  4. この XmlTextReader から ReadXml する
みたいな流れになるかな?
est
会議室デビュー日: 2007/08/03
投稿数: 12
投稿日時: 2007-11-05 16:48
>Hongliang さま

お返事ありがとうございます。
そして、遅くなりまして申し訳ありません。

試しに、DTD表記を消した同様のXMLファイルを用意し、
DataSetに読み込ませてみたところ、現象は起きなくなりました。
原因はDTDの外部サブセットの定義がXMLにされているということでした。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)