2011-03-15 13 views
2

service.svcファイルにパラメータを配置することで、アプリケーション固有の構成情報をWCFに渡すことができます。WCF .svcファイルにパラメータを追加する

私は、さまざまなアプリケーションから呼び出す標準エラーロギングWebサービスを持っています。私は、異なる名前のサービスを呼び出すことができ、サービスが呼び出された方法を知って別のファイルに書き込むことができるようにしたいと考えています。たとえば、アプリケーションはWarning.svc、Serious.svc、またはCritical.svcを呼び出し、どちらが呼び出されているかに応じてメッセージを適切なファイルに書き込みます。

私の考えは、.svcファイルにWCFがどのように呼び出されたかを伝えるパラメータを入れることです。そうでなければ、私のコードの中からsvcファイルの名前を取得する方法はありますか?

コールごとに異なるメソッドを持つことができますが、追加タイプを追加する場合はWCFを変更する必要があります。一方、別の.svcを追加するだけで、コードを変更することなく機能を追加できます。

答えて

1

.svcファイルでこれを行うことはできません。

しかし、これはあなたがやりたいことをやり遂げるのに非常に複雑なやり方であり、典型的なWebサービススタイルではありません。基本的に同じWebサービスのエンドポイントがあまりにも多すぎるのではなく、わずかな違いがあります。これは将来的に維持する悪夢となるでしょう。

もう1つのパラメータ(文字列または列挙型など)を受け入れる方法を変更できないため、どのファイルをログに記録するのかを指定できません。 nullを渡した場合は、デフォルトの値に書き込みます。これは、通常、共通ロギングパッケージで行われます。

3

カスタムServiceHostFactoryをsvcファイル<%@ ServiceHost %>タグで指定し、必要に応じてservice属性を使用できます。この値はSHFactoryに渡され、SHFactoryを解析してServiceHostを初期化します。

Service1.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService2.Service1" Factory="WcfService2.CustomServiceHostFactory" CodeBehind="Service1.svc.cs" %> 

CustomServiceHostFactory.cs:

namespace WcfService2 
{ 
    using System; 
    using System.ServiceModel; 
    using System.ServiceModel.Activation; 

    public class CustomServiceHostFactory : ServiceHostFactoryBase 
    { 
     public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses) 
     { 
      var host = new ServiceHost(Type.GetType(constructorString), baseAddresses); 
      host.AddDefaultEndpoints(); 
      return host; 
     } 
    } 
} 
+0

興味深い

はここだけで、デフォルトのWCFの行動を反映例です。新しいものを毎日学ぶ! –

+0

私はこの方法についてはわかりませんでしたが、MSDNのドキュメンテーションからは分かりません。なぜならそれはひどいことです!あなたはどこかでこれについてオンラインで学びましたか?リンクがありますか? –

+0

リフレクター+試し&エラー、私は今smaineがかなり良い記事を持っているのを見ています:http://hyperthink.net/blog/servicehostfactory-vs-servicehostfactorybase/ – alexdej

関連する問題