2

.net 4.0

独自のweb.configファイルを使用し、同じエンドポイントを使用して同じWCFWebサービスを呼び出す2つのWebプロジェクトがあります。

どちらもファイルを持つ共通プロジェクト(dll)を使用しapp.configます。エンドポイント情報をその構成ファイルに移動したいのですが、これは可能ですか?エンドポイント情報が欲しい

<client>  
    <endpoint/> 
<client/> 

共通の場所から両方のWebアプリで共有されますか?

Web.configここではファイルバインディング情報は省略されています

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.serviceModel>
      <bindings/>          
      <client configSource="client.config">
   <system.serviceModel/>
</configuration>

client.configCommonProject内のファイル

 <client>
      <endpoint
        name="endpoint1"
        address="http://localhost/ServiceModelSamples/service.svc"
        binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_IHello"
        behaviorConfiguration="IHello_Behavior"
        contract="IHello"/ >

タイプミスについてお詫びします。1。client.configに要素が含まれていました。2.プロジェクトのビルドプロパティ内にCOPY"$(TargetDir)*。config" "$(ProjectDir)"を追加しました

web.config(configSource)とclient.configの両方で言及するだけで、VStudioは設計時間を叫びますが、正常に動作しますか?

4

3 に答える 3

1

WCF構成の一部は、「アウトソーシング」することで共有できます。

<system.serviceModel>
    <client configSource="client.config" />
    .....
</system.serviceModel>

そして、このコンテンツをあなたのclient.config:に入れてください

<?xml version="1.0" encoding="utf-8"?>
<client>
    <endpoint name="ABC"
        address="http://......."
        binding="......."
        contract="......" />
</client>

app.configこれらの構成ファイルは.NETFrameworkによって使用/参照されないため、一般的なアセンブリに何かを入れることはできません。アプリまたはWebサイトのメイン構成ファイルに情報を入れる必要があります( web.config)-ただし、特定のセクションを個別の外部ファイルに「外部化」して、そのように共有することができます

于 2012-11-29T12:10:49.900 に答える
0

私はそのようなシナリオで働いてきましたが、それは実行不可能だと思います。

于 2012-11-29T13:17:07.050 に答える
0

別の方法は、カスタムChannelFactoryクラスを使用してから、インジェクションまたはデフォルトのルールによってclient.configパスを指定することです。

カスタム構成パスを受け入れるカスタムChannelFactoryを作成する方法は次のとおりです 。http ://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on -the-client-side.aspx

以前this.GetType.Assembly.GetExecutingAssembly().ManifestModule.Name + ".config"は、共有ライブラリの名前と一致するデフォルトの構成ファイルを動的に取得していました。

両方のWebアプリに構成パスを使用してカスタムChannelFactoryをインスタンス化させるか、Webサービスと対話する共通ライブラリに抽象化レイヤーを追加して、Webアプリが直接依存する代わりに新しい抽象オブジェクトを使用することができます。 Webサービス。これは、Webアプリを邪魔することなく、Webサービスの更新に対応する必要がある場合に最適です。

このSO回答の詳細:ConfigurationManagerを使用して任意の場所から構成をロードする

于 2013-12-19T22:36:13.440 に答える