none
configファイルあるWebServiceのアドレスを変更しても変更したアドレス先を参照していない RRS feed

  • 質問

  • はじめまして

    WindouwsアプリをC#で開発を行い、
    データベースの参照・更新はWebServiceを使用しています。
    フレームワークのバージョンは4.0です。

    作成したWebServiceをWindouwsアプリ側で使用する時は
    Web参照の追加画面から指定しています。

    指定したタイミングでWeb Referencesフォルダがプロジェクトに
    作成され、app.configとSettings.settingsに
    指定したWebServiceのIPアドレスが設定されます。
    ここで設定されているIPアドレスはローカルのIPアドレスです

    これをDLLにし、exeファイルがDllを参照する形で
    製造を進めています。

    今まで作成したDllを稼働確認をする場合はアドレスを変更していなかったのですが、
    結合テストをするにあたり、dll自体はビルドせず、
    dll.configファイルに記載されているWebServiceのアドレスを
    結合テスト環境用に変更しました。
    結合テスト環境のwwwrootの配下に発行済みのWebServiceがあります。
    URLの動作がダイナミックに設定しているので、
    configに記載しているアドレスを変更しただけで、結合テスト環境にあるWebService
    を参照すると思っていたのですが、参照していなくエラーが発生します。
    Settings.settingsのアドレスを結合テスト用に変更しビルドし直すと正常に動作しました。

    dllの場合は、app.configとSettings.settingsの二つを
    変更しないといけないのでしょうか?

    ちなみにexeはconfigのアドレスを変更するだけで正常に
    動作しています。

    ご教授お願いいます。

     


    2011年8月11日 10:49

回答

  • サブをメインに変更するから読めなく(見つからなく)なるんでしょう。.dll.configに書かれている内容をそのまま.exe.configに書き写す必要があります。

    それからこの情報を読み出しているコードが原因の可能性もあります。こちらは提示されていないので正しいかどうかは判断できません。

    • 回答としてマーク Ninichi 2011年8月16日 7:13
    2011年8月16日 3:49
  • app.config のマージは、コピー元とコピー先をきちんと選ばないとダメです。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    
          <!-- 実行ファイルの configSections/userSettings の中身 -->
          <section name="Foo.Properties.Settings" ... />
    
          <!-- DLL ファイルの configSections/userSettings の中身 -->
          <section name="Bar.Properties.Settings" ... />
    
        </sectionGroup>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    
          <!-- 実行ファイルの configSections/applicationSettings の中身 -->
          <section name="Foo.Properties.Settings" ... />
    
          <!-- DLL ファイルの configSections/applicationSettings の中身 -->
          <section name="Bar.Properties.Settings" ... />
    
        </sectionGroup>
      </configSections>
      <userSettings>
    
        <!-- 実行ファイルの userSettings の設定 -->
        <Foo.Properties.Settings>
           ...
        </Foo.Properties.Settings>
    
        <!-- DLL ファイルの userSettings の設定 -->
        <Bar.Properties.Settings>
           ...
        </Bar.Properties.Settings>
    
      </userSettings>
      <applicationSettings>
    
        <!-- 実行ファイルの applicationSettings の設定 -->
        <Foo.Properties.Settings>
           ...
        </Foo.Properties.Settings>
    
        <!-- DLL ファイルの applicationSettings の設定 -->
        <Bar.Properties.Settings>
           ...
        </Bar.Properties.Settings>
    
      </applicationSettings>
    </configuration>
    


    こんなかんじでしょうか。

    • 回答としてマーク Ninichi 2011年8月16日 7:13
    2011年8月16日 4:07

すべての返信

  • http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/ce6646e4-b051-42cc-841b-a029ec720b14

    こちらのスレッドで同様の質問がありました。app.configもSettings.settingsもソースコードであり、実行時には参照されません。.dll.configも実は参照されず、.NET Frameworkでは.exe.configを参照します。

    2011年8月11日 12:13
  • 返信ありがとうございます。

    要は、dll.configに記載されているWebServiceのアドレスを

    exe.configに追記するということでしょうか?

    質問ばかりですいません。。

    2011年8月11日 12:51
  • .exe.config に追記、でいいんではないでしょうか。

    DLLのWeb参照URLをダイナミックに変更する方法
    http://social.msdn.microsoft.com/Forums/ja/vsgeneralja/thread/4557a4a6-1a6e-4f8b-a6f1-ad7893f96e7c
    2011年8月12日 1:20
  • 佐祐理さん
    totojoさん

    ありがとうございます。
    .dll.configに記載されているアドレス(クライアントのアドレスが設定されています)を
    .exe.config に追記し、サーバーのアドレスに書き換え、
    リビルドしたのですが、まだクライアントのWebServiceを参照しているみたいです。

    exeとdllを別ソリューションで作成しているから、dllがexe.configを参照していない
    のでしょうか?

    ご教授お願いします。

    exe.configの変更内容
    【変更前】
        <applicationSettings>
            <メイン.Properties.Settings>
                <setting name="メイン_hoge_SysDate" serializeAs="String">
                    <value>http://172.21.1.144/GetSysDate/SysDate.asmx</value>
                </setting>
            </メイン.Properties.Settings>
        </applicationSettings>

    【変更後】
        <applicationSettings>
            <メイン.Properties.Settings>
                <setting name="メイン_hoge_SysDate" serializeAs="String">
                    <value>http://172.21.1.144/GetSysDate/SysDate.asmx</value>
                </setting>
                <setting name="サブ_GetMaster_GetMst" serializeAs="String">
                    <value>http://172.21.1.144/GetMst/GetMst.asmx</value>
                </setting>
            </メイン.Properties.Settings>
        </applicationSettings>

    2011年8月16日 2:19
  • もともとあったdll.configににも<メイン.Properties.Settings>タグになっていたのでしょうか? <サブ.Properties.Settings> となりそうなものですが…。configに異なるタグを書けば読めなくなるのは当然です。

    dllでどのようにconfigを読みだしているのかコードを上げていただかないと原因はわかりません。

    2011年8月16日 2:25
  • 返信ありがとうございます。

    dllのconfigの内容です。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="サブ.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <applicationSettings>
          <サブ.Properties.Settings>
                <setting name="サブ_GetMaster_GetMst" serializeAs="String">
                    <value>http://172.21.1.144/GetMst/GetMst.asmx</value>
                </setting>
            </サブ.Properties.Settings>
        </applicationSettings>
    </configuration>

    サブをメインに変更してもダメでした。

    ソリューションを別で作成しているというのは関係ないということなのでしょうか?

     

    2011年8月16日 2:59
  • サブをメインに変更するから読めなく(見つからなく)なるんでしょう。.dll.configに書かれている内容をそのまま.exe.configに書き写す必要があります。

    それからこの情報を読み出しているコードが原因の可能性もあります。こちらは提示されていないので正しいかどうかは判断できません。

    • 回答としてマーク Ninichi 2011年8月16日 7:13
    2011年8月16日 3:49
  • app.config のマージは、コピー元とコピー先をきちんと選ばないとダメです。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    
          <!-- 実行ファイルの configSections/userSettings の中身 -->
          <section name="Foo.Properties.Settings" ... />
    
          <!-- DLL ファイルの configSections/userSettings の中身 -->
          <section name="Bar.Properties.Settings" ... />
    
        </sectionGroup>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    
          <!-- 実行ファイルの configSections/applicationSettings の中身 -->
          <section name="Foo.Properties.Settings" ... />
    
          <!-- DLL ファイルの configSections/applicationSettings の中身 -->
          <section name="Bar.Properties.Settings" ... />
    
        </sectionGroup>
      </configSections>
      <userSettings>
    
        <!-- 実行ファイルの userSettings の設定 -->
        <Foo.Properties.Settings>
           ...
        </Foo.Properties.Settings>
    
        <!-- DLL ファイルの userSettings の設定 -->
        <Bar.Properties.Settings>
           ...
        </Bar.Properties.Settings>
    
      </userSettings>
      <applicationSettings>
    
        <!-- 実行ファイルの applicationSettings の設定 -->
        <Foo.Properties.Settings>
           ...
        </Foo.Properties.Settings>
    
        <!-- DLL ファイルの applicationSettings の設定 -->
        <Bar.Properties.Settings>
           ...
        </Bar.Properties.Settings>
    
      </applicationSettings>
    </configuration>
    


    こんなかんじでしょうか。

    • 回答としてマーク Ninichi 2011年8月16日 7:13
    2011年8月16日 4:07
  • 何度もありがとうございます。

    dll.configに記載している

    <サブ.Properties.Settings>から</サブ.Properties.Settings>の内容をそのままexe.configに記載してもダメでしたが、

    section nameの内容も同様に追記したら正しく動作しました。

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

    >それからこの情報を読み出しているコードが原因の可能性もあります。こちらは提示されていないので正しいかどうかは判断できません。

    技術不足ですいません。上記の記載内容ですが、

    ソース内でconfigの内容を読み込んでいる処理はありません。

     

    2011年8月16日 4:20