自分磨きのITノート

プログラミング(C#、VB.NET)言語やデータベースの役立つ情報を初心者から中級者向けに発信します。

Windowsプログラミング入門 - 初めてのWindowsフォームアプリケーション

前回、Visual Studioをインストールしました。今回は、Windowsのデスクトップ上で動作する.NETアプリケーション-Windowsフォームの作り方を紹介します。また、プロジェクトを開始すると出来上がるひな形(テンプレート)ファイルの説明も簡単します。
※ 全くWindowsアプリケーションを作成したことのない方への記事となります。
※ VisualStudio2017で説明しています。

プロジェクト作成(ソリューション作成)

(1)Visual Studioを立ち上げ、[ファイル]-[新規作成]-[プロジェクト]を選択。 180210_1_newproject

(2)言語-[Windows クラッシックデスクトップ]-[Windows フォームアプリケーション]を選択。各項目を入力して「OK」ボタンを押します。
※ 言語はVisual Basicでも構いません。
180210_2_selectwindowsform

アプリケーションの名前やプログラムソースの保管先を選択することが出来ます。
他には.Net Frameworkのバージョンも選択できます。(今回は.Net 4.6.1)


Windowsフォームひな形(テンプレート)ファイルの説明

続きを読む

WCFサービスの単体テスト方法(デバッグ)

WCFサービスアプリケーションのホスト(サーバー)側の単体デバックについてです。

クライアントアプリケーションを作成せずに単体テストするには、VisualStudioのツールである「WcfTestClient.exe」使用することになると思います。色々な引数を与えてテストすることができるので便利です。

「***.svc」のファイルを選択した状態でデバックの開始を行うと以下のようなツールが立ち上がります。
※ SVCファイルを選択してないとブラウザが立ち上がります(最後に対処法説明)・・・20180127_wcftestclient_1
①左ツリーのテストしたいメソッドをダブルクリックします。
②要求の引数の値フィールドに値を入れます。
③「起動」ボタンを押します。
④下の応答に結果が返ります。

通信の中身の確認

下にあるXMLタブを押すと、実際に通信で使用されてSOAPの内容が確認できます。20180127_wcftestclient_xml

XMLの確認で通信量などを把握できます。

引数が配列の場合


続きを読む

WCFは初回が遅い

WCFは便利なライブラリですが、少し気になるのが「初回が遅い」ところです。
一度繋がってしまえば、気にならないくらいの速度なのですが・・・。しかし、その辺をエンドユーザに気づかれないように作りこむのもプログラマーの宿命!(笑)

遅くなってしまう部分は以下の通りです。

①WCFのチャンネル生成しているところ
②WCFで初回メソッドを呼ぶところ

①WCFのチャンネル生成しているところ

ChannelFactory.CreateChannel()を呼び出すあたりで、System.ServiceModel関連のライブラリをロードしているのに時間がかかっているようです。

以下の方も書かれているように、何度もチャンネルを作成するのはコストがかかるみたいです。
http://tnakamura.hatenablog.com/entry/20090804/wcf_channel_cost

無駄なチャンネルはCloseさせたほうがよいのですが、私はチャンネルオブジェクトをメンバ変数に保持して使いまわしています。(問題がある場合は別の方法を推奨します)

m_wcf = factory.CreateChannel(); // グローバルに格納


②WCFで初回メソッドを呼ぶところ

クライアントからメソッドをコールする時です。
ホスト側のリソース作成に時間がかかっていると思われます。セッション作成などに必要な準備をしているのでしょう。また、Webサービス(IISなど)で構築している場合は、サーバへアクセスするまでのコストも考えられるでしょう。

私は初回にデータ量のすくないメソッドなどを起動時コールして逃げています。
データベースアクセスのADO.NETなどの通信もそうですが、初回はどうしてもリソースの確保に時間がかかるので、それを知ったうえで遅さを隠蔽するように作れたらよいですね。

スポンサードリンク
自己紹介
【管理人】
なみやん
【コメント】
プログラムを組むことが大好きな30代男性。IT系の仕事を10年ちょいやっています。このブログを通して知識を人に伝えることによって、自分をさらに磨こうと精進しています。応援よろしくお願いします。
免責事項
当サイトで紹介しているサンプルソースコードは自由に使用いただいても結構が、自己責任でお使いください。また、記事の内容が主観的であったり、努力していますが正しくなかったりする場合がございます。読者本人の判断にお任せいたします。