2016年12月27日火曜日

ASP.NET MVC キャッシュを無効にする

ASP.NET MVC キャッシュを無効にする
 
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public ActionResult Index()
{
    return View();
}

2016年12月23日金曜日

ASP.NETでlog4netを使う

ASP.NETでlog4netを使う場合

nugetでlog4netをinstall

log4netの設定ファイルを作成

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <!-- ログ出力先の定義 -->
    <appender name="DailyFileAppender" type="log4net.Appender.RollingFileAppender">

      <!-- ログ・ファイル名の先頭部分 -->
      <param name="File" value="c:\temp\EbiWebService" />

      <!-- ファイル名の日付部分 -->
      <param name="DatePattern" value='yyyyMMdd".log"' />

      <!-- ログファイルの切替 { サイズ: Size, 日付: Date } -->
      <param name="RollingStyle" value="Date" />

      <!-- 追加 -->
      <param name="AppendToFile" value="true" />

      <!-- ログ・ファイル名が固定ではないので“false”を指定 -->
      <param name="StaticLogFileName" value="false" />

      <!-- ログの書式 -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <root>
      <!-- ログのレベルを指定 -->
      <!-- すべてのログレベルを出力 -->
      <level value="ALL" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="DailyFileAppender" />
    </root>
  </log4net>
</configuration>


「グローバルアプリケーションクラス」を追加し、Application_Start で設定ファイルの位置を指定します。
void Application_Start(object sender, EventArgs e) 
{
 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/App_Data/log4net.xml")));
}

後はPGに記述

using System;
using log4net;

public partial class _Default : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Fatal("log4netログ出力~Fatal");
        log.Error("log4netログ出力~Error");
        log.Warn("log4netログ出力~Warn");
        log.Info("log4netログ出力~Info");
        log.Debug("log4netログ出力~Degug");
    }
}

2016年12月20日火曜日

Xaqmarin.FormsでWCFを構築してテストすると、EndPointが見つからないとエラー出力で終了する。

現象
Xaqmarin.FormsでWCFを構築してテストすると、EndPointが見つからないとエラー出力で終了する。

理由
WCFサービスおよび、WPFなどの、通常の.NETプロジェクトは
App.config(アプリ設定ファイル)に、EndPointのurlが記述される。

しかし、Xamarin.Formsを使ったProjectは、App.configが無いので
プログラムソース内に、On Cordingをする。

※誰か、Android Projectで App.configが使える方法を教えてください。

経緯
WCF Projectの単体テストのUrlは当然LocalhostでテストOK

Android側でテストするとNG、 1日悩みました、Orz......

単体テストOKだから、AndroidのWCF Clientだも読めると簡単に思っていたら
エラー出力なんですから。

Android clientから見たら、Localhostって、Androidじゃないですか!
しっかりと、WCF Serviceが起動している、IP Addressを指定しないとNGになったのです。

XamarinのWCFを使ったサンプルには、そこまで書いていなくて

サンプルをBuildして実行しても、エラーは出ますよね、だって EndPointのUrlが
存在しないんだから。

記述方法

 AskServiceReference.EbiServiceClient client;

        public MenuViewModel(Page page) : base(page) {
            Title = "Aska";

            //WCF 開始
            var binding = new BasicHttpBinding() {
                Name = "basicHttpBinding",
                MaxReceivedMessageSize = 67108864,
            };

            var timeout = new TimeSpan(0, 1, 0);
            binding.SendTimeout = timeout;
            binding.OpenTimeout = timeout;
            binding.ReceiveTimeout = timeout;

            client = new AskServiceReference.AskServiceClient (
                binding,
                new EndpointAddress ("http://192.168.184.172/EbiWcf/EbiService.svc"));

            client.OpenCompleted += mDATE_OpenCompleted;
            client.GetDataCompleted += mDate_GetDataCompleted;

            client.OpenAsync();
        }
}

        private async void mDATE_OpenCompleted(object sender, AsyncCompletedEventArgs e) {
            client.GetDataAsync();
        }

        private async void mDate_GetDataCompleted(object sender,       AskServiceReference.GetDataCompletedEventArgs e) {

            foreach (var item in e.Result) {
                お知らせ1 = item.お知らせ1;
                お知らせ2 = item.お知らせ2;
            }
            client.CloseAsync();
        }

Android Clientだと、無条件に非同期になるようです。
Openしてから、GetDataを行いますが、これだと、画面表示に間に合わないので

Xamarin.FormsのWCFサンプリを参照することをお勧めします。
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/walkthrough_working_with_WCF/


2016年12月19日月曜日

Xamarin Forms でWCFサービスを参照するとコケる

現象
Xamarin Forms でWCFサービスを参照するとコケる。

原因
ASP.NET CoreをPCLで選択しているとNGっぽい。

Xamarin FormsのPCLから ASP.NET Core 1.0を除外して
サービス参照すると、正常に参照が可能になる。

2016年12月16日金曜日

C# ASP.NET Core用 アプリサーバ KestrelHttpServer

A web server for ASP.NET Core based on libuv. 

https://github.com/aspnet/KestrelHttpServer 

libuvって、何だ?と調べたら

libuvは 非同期イベント駆動 のプログラミングスタイルを強制します。 libuvの中心的な機能はイベントループとI/Oと他の活動(activity)の通知をベースにしたコールバックを提供することです。libuvはタイマのようなユーティリティ、ノンブロッキングのネットワークのサポート、非同期のファイルシステムへのアクセス、子プロセス等を提供します。

しばやんさんが、.NET周りのアプリサーバについて記事をまとめてありました。
http://blog.shibayan.jp/entry/20141106/1415200465

2016年12月15日木曜日

MS-SQL identityの項目にInsertする方法

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

Xamarin FormのButton Textがすべて大文字になる。

Android LollipopでButtonのTextが大文字(textAllCaps)は、仕様です。

知らなかったよ~

Xamarinの場合、Style.xmlで新しいThemeを作って、ButtonのSetAllCapsをfalseにするのが
正解らしいです。

You could also just put this in your Android styles.xml:
<style name="MyTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
        <item name="android:textAppearanceButton">@style/MyTextAppearance.Material.Button</item>
</style>

<style name="MyTextAppearance.Material.Button" parent="@android:style/TextAppearance.Material.Button">
        <item name="textAllCaps">false</item>
        <item name="android:textAllCaps">false</item>
</style>

https://forums.xamarin.com/discussion/34817/button-on-android-all-caps

styles.xmlを変更したらOKでした。

2016年12月12日月曜日

MAGTIC XPA 3.1で作成したAndroidアプリ(.apk)がGoogle Developerにupload出来ない。

MAGIC XPA 3.1で作成したAndroid (.apk)が、 Google Developerにuploadしようとしたら
以下のエラーが表示された。

アップロード出来ませんでした。
この APKは、aaptでは解析できません。エラー出力
Failed to run aapt dump badging: ERROR getting 'name' attribute: attribute is not a string value

エラー内容は、文字列の値が悪いと言われるけど、エラーの場所って何処?

MAGIC のリッチビルダーで作成したのに、NGになるってどうして?

原因
C:\Program Files\Magicxpa\Studio 3.1\RIAModules\Android\Source\app\src\main
のフォルダにある、AndroidManifest.xmlに、@string/があるとNG

対応
C:\Program Files\Magicxpa\Studio 3.1\RIAModules\Android\Source\app\src\main
のフォルダにある、AndroidManifest.xmlの、@string/ をすべて
直接値を記述する。

res/values/strings.xmlを参照するのではなく、AndroidManifest.xmlに値を記述


android:label="@string/app_name"

android:label="hogehogeApp"

2016年12月8日木曜日

Xamarin.Froms用 XAMLデザイナー

2016年12月8日 現在 VisualStudio 2015で Xamarin.FormsのXAMLデザイナーは無いが
3rd partyに、XAMLデザイナーが有った。

http://gorillaplayer.com/

なかなか使い勝手が良い。
XAMLが使えるから、UIとBLの分離も楽になる。

早く、VisualStudioでも実装されて欲しい機能です。
MacOSのVisualStudioには、ブレピューが実装されているのにね。

2016年12月1日木曜日

ASP.NET MVCでBackspaceを無効

ASP.NET MVC5でBackspaceを無効にしたい。

$(document).keydown(function(e) {
 if (e.keyCode === 8) {
  var tag = e.target.nodeName.toLowerCase();
  var $target = $(e.target);
  if ((tag !== 'input' && tag !== 'textarea') || $target.attr('readonly') || $target.is(':disabled')) {
   return false;
  }
 }
 return true;
});
 
上記scriptをheadタグに埋め込む。