2010-12-26 1 views
11

WCF newbie here ...私はNetTcpBindingを使用してWCFサービスを自己ホストしようとしています。私はすべての私は、NetTcpBindingにWsHttpBindingから変更され、コードに結合し、次のようになります行っているMSDN "how-to" tutorialに基づいて:NetTcpBindingをコードで実行できますか?あなたはすべきですか?

var baseAddress = new Uri("net.tcp://localhost:8000/MyWebService"); 
var selfHost = new ServiceHost(typeof(ConcreteWebService), baseAddress); 
try { 
    var binding = new NetTcpBinding(); 
    binding.Security.Mode = SecurityMode.Message; 
    selfHost.AddServiceEndpoint(typeof(IWebService), binding, "TRWebService"); 
    selfHost.Open(); 
    Console.WriteLine("The service is ready at {0}", baseAddress.AbsoluteUri); 
    Console.WriteLine("Press <ENTER> to terminate service."); 
    Console.WriteLine(); 
    Console.ReadLine(); 

    selfHost.Close(); 
} catch (CommunicationException ce) { 
    Console.WriteLine("An exception occurred: {0}", ce.Message); 
    selfHost.Abort(); 
} 

事があり、チュートリアルでは、あなたがにsvcutil.exeを実行する必要が語りますクライアントのためのプロキシを生成する...しかし、私はNetTcpBindingに切り替えたので、svcutilはもう動作しません - 私のサービスを検出できません。私はこの問題を探って、NetTcpBindingのすべての単一の例が、コードではなくapp.configファイル内の設定を行い、すべてが "mexTcpBinding"というバインディングタイプの "Mex"というエンドポイントを追加することを発見しました。これに相当するコードはありません。

私のプロジェクトを変更してapp.configを使用し、コードベースのアプローチを放棄する必要がありますか?誰が私にメキシコが何であるか、なぜ私はそれが必要なのか、なぜ(それは明らかに)コードで呼び出すことができないのかを説明することができますか?一般に、いつapp.configを使用するのが良いでしょうか?また、WCFサービスのコードはいつですか?

+0

私はまったく同じチュートリアルに従っており、コールバック契約を望んでいたので、私はtcpに切り替えた後、全く同じ問題がありました。 – bryanbcook

答えて

17

netTcpBindingを使用し、「企業のファイアウォール」LAN環境で使用する場合は、確かにそうすることをお勧めします。mexTcpBindingを順番に使用してMEXエンドポイント(メタデータエクスチェンジ)を公開する必要がありますsvcutilがそのサービスを検出して見つけることができるようにします。

MEX =メタデータエクスチェンジは、WCFがサービスをどのように見せているかを「公に宣伝」するために使用するメカニズムです。 MEXエンドポイントがある場合、svcutilのようなユーティリティは、サービスをクエリして「発見」することができます。それが公開するすべてのサービスメソッド、取得することが期待されるパラメータなどについて調べます。

MEXエンドポイントを追加するには、間違いなくコードも使用できます。このフラグメントような何か:MEXなし

var mexBinding = MetadataExchangeBindings.CreateMexTcpBinding(); 
selfHost.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "mex"); 

、あなたは何とかクライアントは、クライアントが適切との適切なメソッドを呼び出すことを確認することができるようにあなたのサービスを提供していますが何であるかをあなたのサービスを消費しようとしている「伝える」する必要がありますパラメーター。

+0

+1説明をありがとう! app.configとコードの設定はどうですか? –

+0

@Shaul:app.configは柔軟性をもたらします。コードを変更せずにbasicHttpBindingに変更して再コンパイルすることもできますが、それ以外のコードで行うこともできます。あなたのニーズに合ったものを選んでください! –

+0

ありがとう..素晴らしい答え。 – Prasanth

関連する問題