Archive

Archive for the ‘Visual Basic’ Category

ASP.NET WebAPIをVB.NETで利用する場合に、ヘルプページのコメントを利用する。

ASP.NETではVB.NETの積極的なサポートがなくなりつつ有るこの頃ですが、うちのちかくではVB.NETの要望が収まらず、VB.NET+WebAPIでアプリを作っています。

この頃のVisual StudioのWebAPIプロジェクトでは、APIのヘルプページを自動的に作成する機能が提供されていますが標準のままだと、ドキュメンテーションコメントを書いてもDescriptionに反映してくれません。

検索すると、Areas/App_Start/HelpPageConfigの下記コメントを外せという指示とともにWebプロジェクトのビルド設定で、ドキュメンテーションコメントを吐き出す場所を設定しろという記事が目につきます。

Public Sub Register(config As HttpConfiguration)
    '' Uncomment the following to use the documentation from XML documentation file.
    'config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))

 

C#のWebプロジェクトのビルドプロパティー

image

VB.NETのWebプロジェクトのコンパイルプロパティー

image

ところがVB.NETのASP.NETプロジェクトではこの項目がありません。ただ、VB.NETのプロジェクトファイルにもProject/PropertyGroup/DocumentationFile要素はあるのでこいつにパスを指定すれば大丈夫だろ。と思ったのですが、、、出てくれません。無視されるようです。。。

ただ、まぁ指定のフォルダーにドキュメンテーションコメントがコピーされればいいので、ビルド後イベントを使ってあげましょう。

image

copy "$(ProjectDir)bin\$(TargetName).xml" "$(ProjectDir)App_Data\"

カテゴリー:ASP.NET, Visual Basic

.NET Fiddle

久々にRSSを眺めてたら見つけました。

いつのまにやらこんなものがあったんですね。

時たまカーソルがおかしくなるけれど、インテリセンスもしっかりしていて良いと思います。

https://dotnetfiddle.net/

キャプチャ

サポートしている言語は「C#,VB.NET、F#」と何かとハブられているVB.NETが入っていてポイント高いです。ただ、VB.NETはちょっと構文チェックがきつい気もする。

プロジェクトのタイプはこんな感じです。まぁサーバー側で動作するので今のところWinodowsアプリは実行できないみたいですね。

image

ついにこの時が、、、No More WebForms, No More Visual Basic

Top 10 Changes in ASP.NET 5 and MVC 6

いや、わかってたんですよ。わかってはいましたが、、、

No More Web Forms

You can continue to build Web Forms apps in Visual Studio 2015 by targeting the .NET 4.6 framework. However, Web Forms apps cannot take advantage of any of the cool new features of ASP.NET 5 described in this list. If you don’t want to be left behind as history marches forward then it is finally time for you to rewrite your Web Forms app into ASP.NET MVC.

超意訳

引き続きVisual Studio 2015でも.NET 4.6を選択すればWebFormsのビルドを行うことができます。しかし、ASP.NET WebFormsではASP.NET 5の新機能を利用することはできません。これはASP.NETの進化に取り残されたくない場合ASP.NET WebFormsアプリをASP.NET MVCアプリに書き換えるための猶予期間なのです。

カテゴリー:ASP.NET, Visual Basic タグ:

VB14で新しく増える構文で個人的に気に入っている構文ベスト3

VB TeamブログでVB14で採用される新しい構文について解説のエントリーが上がっています。
New Language Features in Visual Basic 14 (non-animated)

全体的に今までむず痒かった部分に手が入った感じですね。個人的にベスト3上げるとこの辺りが特に嬉しい!!

1位. 文字列の拡張書式構文

String.Formatの糖衣構文ですね。今までのString.Formatよりも可読性が上がって良い感じです。

まだPreviewには入っていないようです。(なんて訳せばいいんだろう。。。)

2位. 行継続中のコメント

これもなにげに嬉しい。VB10で行継続が明らかな場合は行継続子(_)が不要になりましたが、行継続中のコメントは相変わらず受け入れてくれなかったんですよね。

3位 ?.オペレーター

?.オペレーターは今までのVBから見るとちょっと驚く構文ですよね。記号っぽい構文はできるだけ採用してこなかったVBなのでびっくりしましたが、シンプルに書けるのは良い感じです。

まだ確認していないんだけれどこれらは糖衣構文なので、Visual Studio 14を使えばターゲーットフレームワークをVB14より低くしても問題ない機能ってことでいいのかな?

ASP.NET Web APIのサービスをJSONPで呼び出す。

2014年7月9日 3件のコメント

MSDNフォーラムをのぞいたら、こんなスレッドがあったのでWeb APIの入門を兼ねていじってみます。

クロスドメインリクエストへの対応については松崎さんのブログで詳しくまとまっています。

JSONP などクロス ドメイン (Cross-Domain) 問題の回避と諸注意

Web Apiの追加

まずは何も考えずに、WebApiを一つ追加しましょう。

image image

名前はとりあえずUserControllerとかにしておきます。

image 

とりあえずそのまま動作を確認してみる

この状態で http://host/api/user/http://host/api/user/1 といったURLをリクエストすれば、[ “value1”, “value2" ] や “value” といったJSON文字列が取得できるはずです。

FiddlerやChromeのAdvanced Rest Clientなんかから確認してみましょう。

一応それっぽい文字列が帰ってきていますね。

image

jQueryから呼び出してみる。

jQueryのajax関数から呼び出すとするとこんなかんじですね。

$("#getUser").on("click", function () {
    var userId = $("#userId").val();
    $.ajax({
        url: "http://localhost:45924/api/user/" + userId,
        type: 'GET',
        dataType: 'json'
    }).success(function (data) {
        alert(data);
    }).error(function(data) {
        alert(data);
    });
});

ちゃんと返ってきました。

image

Web ApiをJSONPに対応させる。

Web ApiでJSONP形式で値を返したい場合は、NugetパッケージのWebApiContrib.Formatting.Jsonpを使うと簡単に実現できます。前述のパッケージを導入後、Global.asaxやWebApiConfigなどのクラスでコールバック付き(?callback=関数名)のリクエストを受け付けた場合にJSONP形式に整形するFormatterを登録します。

Public Module WebApiConfig
    Public Sub Register(ByVal config As HttpConfiguration)
        ' Web API の設定およびサービス

        ' Web API ルート
        config.MapHttpAttributeRoutes()

        config.Routes.MapHttpRoute(
            name:="DefaultApi",
            routeTemplate:="api/{controller}/{id}",
            defaults:=New With {.id = RouteParameter.Optional}
        )

        config.AddJsonpFormatter()
    End Sub
End Module

ちょっと見えづらいですが、Responseタブの中身を見ると、JSONP形式(a([“value1”, “value2”]))で結果が帰ってきたのを確認できます。

image

jQueryから呼び出す。

jQueryを使っている場合は、ajax関数のdataTypeパラメーターに”jsonp”を指定するだけですね。

$(function() {
    $("#getUser").on("click", function () {
        var userId = $("#userId").val();

        $.ajax({
            url: "http://localhost:45924/api/user/" + userId,
            type: 'GET',
            dataType: 'jsonp'
        }).success(function (data) {
            alert(data);
        }).error(function(data) {
            alert(data);
        });
    });
});
カテゴリー:ASP.NET, Javascript, Visual Basic

HttpContextをUnitTestで使う

UnitTestだとHttpContextが空になるんだけれど、UnitTest中にRequest.Formってどうにか参照できないの?って聞かれました。

サービスクラスの中でHttpContextやHttpRequestを直に参照しないような設計をすればいいんですが、今からだと難しいらしいので、昔の記憶をほじくり返してみる。そういえばHttpSimulatorってのがありましたね。前はC#のソースからビルドしたような気がするけれど、今だとDLLがNugetで公開されているんですね。

HttpSimulator 1.0.0<https://www.nuget.org/packages/HttpSimulator/>

テストプロジェクトにNugetでImstall-Package HttpSimulatorをしたら、HttpSimulatorクラスを作って、Formの値やSessionの値を設定して、SimulateRequestを呼び出してあげましょう。SimulateRequestした後ならHttpContext.CurrentからFormやRequestにアクセスすれば何事のなく利用できます。

<TestClass()> 
Public Class Class1Test
<TestMethod()>
Public Sub RequestFormのxとyの値を足した値が取得できること()
Using simulator = New HttpSimulator().
SetFormVariable("x", "1").
SetFormVariable("y", "2").
SimulateRequest()

Dim target = New Class1()
Assert.AreEqual(3D, target.FormCalc())
End Using
End Sub
End Class
Public Class Class1
Public Function FormCalc() As Decimal
Return Integer.Parse(HttpContext.Current.Request.Form("x")) +
Integer.Parse(HttpContext.Current.Request.Form("y"))
End Function
End Class

カテゴリー:ASP.NET, Visual Basic

Roslyn End User Previewで利用可能になるVBの新しいステートメント

2014年4月4日 1件のコメント

興味半分でVBのデザインノートを除いたら、ずいぶんと新しい構文が増えていたのでちょっと試してみることにしました。

まずは、Roslyn SDKのダウンロードページにある「Upcoming Features in Visual Basic.docx」かをざっと眺めます。今後実装予定の機能については、CodePlexのLanguage feature implementation statusを確認しましょう。

コンテンツとしてはこんなキーワードが出てます。Select Caseステートメントの拡張は幅広くて見慣れないとびっくりするかも。複数行にまたがる文字リテラルやコメントは結構うれしいですね。

  1. Select Caseステートメントの拡張
  2. 読み取り専用の自動実装プロパティー
  3. 複数行にまたがった文字リテラル
  4. yyyy-MM-dd型の日付リテラル
  5. バイナリーリテラル
  6. 数値区切りリテラル
  7. 複数行にまたがるステートメントに対するコメント
  8. バグ修正と小さな変更
    1. XMLドキュメントコメントの修正
    2. TypeOfステートメントでIsNot演算子の利用
    3. パーシャルモジュールとパーシャルインターフェイスのサポート
    4. #Reagion – #End Regionがメソッド内部で定義可能
    5. インターフェイスのReadOnly / WriteOnlyプロパティーを自動実装プロパティーで実装可能
    6. C#との相互運用でOverridesキーワードがある場合のOverloadsキーワードの省略を可能に
    7. Boxing conversions in attribute arguments(???)
  9. C# Previewの変更で検討中の機能
    1. プライマリーコンストラクターによるインスタンスの初期化
    2. Dictonaryの初期化方法の追加(! operatorの追加)
    3. 暗黙的に定義される参照引数(Output キーワードの追加)
    4. Catchブロック内でのAwaitキーワードのサポート