0


2

私はASP.NET Webサイトによって参照されるVB.NETでDLLを書いています。

DLLプロジェクトにはWebサービスへの参照があります。 Webサービスをプロジェクトに追加したときに、一連の構成情報が 'app.config’ファイルに追加されました。

これをホストWebサイトで機能させるには、 'app.config’ファイル内の情報をWebサイトの 'web.config’にコピーする必要がありました。

私のコンパイル済みDLLにこれらの設定を埋め込む方法を誰かが知っていますか? DLLのコンシューマがこの設定ブロックをweb.configファイルに挿入する必要がないようにします。

3 Answer


4


'svc.Endpoint.Address’はSystem.ServiceModel.EndpointAddress型のオブジェクトを想定しているので、実際に必要なのは次の行にあります。

新しいSystem.ServiceModel.EndpointAddressとしての薄暗いアドレス( "http:// Whatever")新しいSystem.ServiceModel.BasicHttpBinding()としての薄暗いバインディング

'バインディングオブジェクトはすでにApp.Configの'セクションにあるデフォルト値で既に設定されていますが、ここでオーバーライドすることができます。 binding.ReceiveTimeout = new System.TimeSpan(0,20,0)

新規作成MyWebServiceSoapClient(バインディング、アドレス)


1


_ 私のコンパイル済みDLLにこれらの設定を埋め込む方法を誰かが知っていますか? DLLのコンシューマーがweb.configファイルにこの設定ブロックを挿入する必要はありません。 _

はい、アドレスをコードで設定できます。 生成されたプロキシクラスには、Urlプロパティ(古いスタイルのasp.net Webサービスプロキシ用)またはEndpoint.Addressプロパティ(WCF生成Webサービスプロキシ用)があります。

//MyWebService is a non-WCF generated proxy
MyWebService ws = new MyWebService();
ws.Url = "http://whatever/";

or

//MyWebServiceSoapClient is a WCF generated proxy
MyWebServiceSoapClient svc = new MyWebServiceSoapClient();
svc.Endpoint.Address = "http://whatever";

しかし、これはおそらくあなたのdllにそれらの値をハードコーディングすることを意味するでしょう、そして私はそれをお勧めしません…​


0


実際には、コピー&ペーストが解決策です。 これが.NETが常に機能している方法です。 外部(ライブラリ)コードの設定は、 "実行中の"アプリケーションの設定ファイルに保存する必要があります。 これは、コンソールまたはWindowsサービスアプリケーションの場合は* _application _ *。exe.configファイル、ASP.NET、WCF、またはその他のWebベースのアプリケーションの場合はweb.configファイルの1つです。

https://stackoverflow.com/questions/634439/if-app-config-for-a-dll-should-be-in-the-main-config-what-do-we-do-with-wcf-refe[DLLのapp.configが "main config"に含まれている必要がある場合…DLL内のWCF参照で何をしますか?]

全体的な考え方は、設定を必要とするライブラリコードが複数の実行アプリケーションによって使用される可能性があるということです。 この場合、設定はアプリケーションごとに異なります。

設定がDLLに含まれていると、DLLの利用者はその設定を編集できなくなります。

これまでに変更が許可されていない「設定」がある場合は、https://stackoverflow.com/a/686126/76337およびhttps://stackoverflow.com/a/655452/76337に示されているように、構成する必要があります。設定不可能な設定ファイルではなく、コード内のもの。