9

Webサービスへの参照を含むクラスライブラリ(.NET)があります(一部のサーバーでは、同じソリューションのプロジェクトではありません)。クラスライブラリには、COMに公開されるクラスがあります。このクラスはWebサービスを呼び出します。

サービス参照を追加すると、クラスライブラリのapp.configにコードが追加されます。

テスト目的で、同じソリューションにデスクトップアプリケーションもあります。このアプリケーションを実行すると、次の例外がスローされます。

ServiceModelクライアント構成セクションでコントラクト'ServiceProxy.EventsServices'を参照するデフォルトのエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素で見つからなかったことが原因である可能性があります。

この例外は、クラスライブラリのapp.configにあるサービス参照用に生成されたコードをコピーしてデスクトップアプリケーションの構成ファイルに貼り付けることで解決できます。

デプロイするときは、DLL(クラスライブラリから構築)のみをデプロイする必要があり、デスクトップアプリはデプロイする必要はありません。DLLで読み取ることができる構成ファイルにサービス参照を含める必要があります。

助言がありますか?

ありがとう!

4

3 に答える 3

6

サービス参照を追加すると、Visual Studioによってプロキシが生成され、サービスのURLのapp.configファイルが読み取られます。

構成ファイルを使用しない静的URLを提供するオプションがあります。

複雑になり、app.config設定なしでダイナミックURLを提供する場合は、この生成されたコードをコピーして、構成データの別の種類のソース(パラメーターなど)を使用するように変更し、その方法でデプロイできます。ちょうどdll。

生成されたコードは、サービス参照の背後にあるコードに隠されています。コードを表示するには、ソリューションエクスプローラーの[すべてのファイルを表示]オプションをアクティブにし、Reference.mapファイルでRefecence.cs(または.vb)ファイルを探す必要があります。

このコードは直接変更しないでください。代わりに、コードをコピーしてから、構造内に新しいクラスを作成してください。(そして元の参照を削除します)

サービス(またはWsdl)を変更する場合は、クラスを手動で変更する必要があることに注意してください。

于 2009-07-07T21:51:51.167 に答える
3

迅速な回答をありがとうございました=)。私はそれらを考慮に入れます。

サービスリファレンスからWebリファレンスに変更しました。これにより、クライアント(私の場合はDelphiデスクトップアプリ)に構成情報を含める必要がなくなります。実際、これを行う方法がわかりません=P。

代わりにWeb参照を使用すると、サービス参照はクラスライブラリに保持される参照を生成します。Davidが言うように、これはプロキシによって使用され、DLLが構成ファイルを持っていないため(Johnが言うように)構成ファイルから変更することはできません。

これまでのところ、私の解決策はWebリファレンスを使用することです。ファイルから構成できるようにするには、何らかのメカニズムをコーディングする必要があると思います。

繰り返しになりますが、お二人に感謝します!

于 2009-07-07T22:25:47.730 に答える
2

.NET構成APIを使用する場合はすべて、アプリケーションの構成ファイルから構成を取得します。DLL構成ファイルのようなものはありません。クラスライブラリに表示されるapp.configは、コピーする必要があるものを示しているだけです。

ここで、アセンブリのみをデプロイできる場合は、アセンブリをコードで構成する必要があります。

于 2009-07-07T22:01:24.550 に答える