ここでは WCF の初心者です... NetTcpBinding を使用して WCF サービスを自己ホストしようとしています。MSDN の「ハウツー」チュートリアルに基づいて、すべてのバインドをコードで行い、それを WsHttpBinding から 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 を使用するようにプロジェクトを変更し、コードベースのアプローチを放棄する必要がありますか? Mex とは何か、なぜそれが必要なのか、なぜ (明らかに) コードで呼び出すことができないのか、またはできる場合、どのように、またはなぜ推奨されないのかを説明してもらえますか? 一般に、app.config を使用するのが適しているのはいつですか? また、WCF サービスのコードを記述するのはいつですか?