vs2010 でクラス ライブラリ プロジェクト [MyLibrary] を作成し、Service Reference [http://127.0.0.1/MyService.svc] を追加します。そのため、app.config にそのようなノードが含まれます。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService"
contract="MyService.IMyService" name="BasicHttpBinding_IMyService" />
</client>
</system.serviceModel>
MyLibrary プロジェクトをコンパイルすると、MyLibrary.dll と MyLibrary.dll.config が生成されます。通常、次のような wcf メソッドを呼び出すことができます。
MyService.MyServiceClient client = new MyServiceClient();
int 結果 = client.Add(3,6);
app.config を programe で操作していません。うまく動作します。
ここで、MyLibrary.dll をロードし、refelection を使用して wcf メソッドを呼び出す別のプログラムを作成します。ServiceModel クライアント構成セクションでコントラクト 'MyService.IMyService' を参照するデフォルトのエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素に見つからなかったためである可能性があります。
実行時にリフレクションを使用して app.config の構成を読み取っていないと思います。そのような方法を使用しようとしましたが、まだ機能しません。
string assemblyPath = Assembly.GetExecutingAssembly().Location;
string configPath = assemblyPath + ".config";
currentDomain.SetData("APP_CONFIG_FILE", configPath);
typeof(ConfigurationManager)
.GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static)
.SetValue(null, 0);
typeof(ConfigurationManager)
.GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static)
.SetValue(null, null);
typeof(ConfigurationManager)
.Assembly.GetTypes()
.Where(x => x.FullName == "System.Configuration.ClientConfigPaths").First()
.GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static)
.SetValue(null, null);
上記の wcf コードの呼び出しを変更したくない場合は、どうすればよいですか? 実行時にリフレクションを使用して app.config を読み込んで認識させる方法。無駄な反省のようです.Thanks!