1

私は WCF サービスの使用方法を学んでおり、この MSDN 記事の 6 ステップのチュートリアルに従うことから始めました。第 4 部では、クライアント コードを生成するための svcutil.exe の使用について説明し、第 5 部では、WCF クライアントを構成する大きくて見栄えの悪い XML ファイルを示します。svcutil.exeとこの XMLを使用することは、WCF デモに採用した非常に単純なソリューションに比べて非常に重いように思えます。

class Program
{
    static void Main(string[] args)
    {
        WSHttpBinding bhb = new WSHttpBinding();
        EndpointAddress epa = new EndpointAddress("http://localhost:8000/index/ServiceReference1");
        ChannelFactory<ServiceReference1.IDemoChannel> cf = new ChannelFactory<ServiceReference1.IDemoChannel>(bhb, epa);

        cf.Open(); 
        ServiceReference1.IDemoChannel channel = cf.CreateChannel();
        channel.Open();

        String s = channel.getHelloWorld(5);
        channel.Close();
        cf.Close();
        Console.WriteLine("Result: {0}", s);
        Console.WriteLine("I'm the client! Press Enter to exit...");
        Console.ReadLine();
    }
}

クライアントを構成するこれら 2 つの非常に異なる方法を見てきましたが、生成されたコードと XML ファイルを使用する利点は何でしょうか。

更新: チュートリアルのパート 5 で XML ファイルを読み直しましたが、XML ファイルが複製されているようで、意図した XML を見て、質問の XML の側面を撤回しました。私が本当に求めているのは、「クライアント コードを書くことはそれほど悪くないように思えるのに、なぜ svcutil.exe を使用してコードを生成したいのか」ということだと思います。

4

3 に答える 3

1

xml 構成を簡単に変更できることとは別に、svcutil (またはプロジェクトへのサービス参照の追加) のもう 1 つの大きな利点は、宣言アセンブリを参照せずに使用できる wcf メソッドによって必要とされ、wcf メソッドから返される自動生成された型です。 . メソッドが文字列を返す Hello World の例では、これは問題ではありませんが、大規模な wcf 実装には多くの要求/応答タイプがある場合があります。

于 2013-02-19T22:48:34.223 に答える
1

私の意見では、常に XML を使用してください。これは、プログラムが展開された後に変更でき、サービスを再起動するだけでよいためです。

デモ コードを使用する場合は、再構築、再コンパイル、再デプロイなどが必要になります。これはXMLを使用するよりもはるかに遅くなります。

于 2013-02-19T22:15:37.660 に答える
0

「クライアント コードを書くことはそれほど悪くないように思えるのに、なぜ svcutil.exe を使用してコードを生成したいのですか?」

簡単なテスト プログラムを作成している場合、コードで行ったことがうまく機能します。

チームと長期間のメンテナンスを必要とする大規模なアプリケーションを開発する場合は、xml 構成の方が適しています。サービスがまったく別のチームによって作成および保守されていて、コードを読み取らせてくれないことを想像してみてください。クライアント構成は、サービスの構成と正確に一致する必要があります。サービス チームが URI やポートを変更したり、証明書 (https) を使用したりした場合、クライアント開発者はどのように確認しますか? 呼び出しは失敗します (非常に有益でないエラー メッセージが表示される可能性があります)。どのように修正しますか?svcutil をもう一度実行して、構成を再生成するだけです。会議を招集したり、(できれば) 更新されたドキュメントを読んだりする必要はありません。

投稿したサンプル テスト コードに戻ります。サービスが localhost 以外の場所にデプロイされるポイントに到達し、URL を更新する以外の理由でクライアントを再コンパイルする必要がある瞬間...それが理解し始めるときです。構成で接続情報を定義する価値。それまでは、気にしないでください。

于 2013-02-19T23:17:57.533 に答える