2011年7月25日月曜日

RIAServiceでパスワードを送る場合の属性

アプリケーションが安全にサーバのエンドポイントにアクセスするために、ユーザ名とパスワードを送るときは、httpsを使用して渡す必要があります。
そのためには、EnableClientAccessAttribute で RequiresSecureEndpoint プロパティを true に設定する必要があります。

例)
 /// <summary>
 /// ドメイン サービスはユーザーの登録を行います。
 /// </summary>
 [EnableClientAccess(RequiresSecureEndpoint=true)]
 public class UserRegistrationService : DomainService
 {
  /// <summary>
  /// ユーザーが既定で追加されるロールです。
  /// </summary>

SilverlightでのXMLファイルの読み込み

ブラウザでのXMLファイルの読み込み
   //設定ファイルを読み込み
   WebClient client = new WebClient();
   client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
   Uri xmlUri = new Uri(Application.Current.Host.Source, "../Props/aFrameworkSettings.xml");
   client.DownloadStringAsync(xmlUri);
  string xml;
  void  client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
  {
   //処理終了
   if (e.Error == null)
   {
    xml = e.Result;
    //このあとxmlを解析する
   }
  }

2011年3月19日土曜日

TripleDESのサンプル



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;
using System.Diagnostics;
namespace TripleDESWindowsFormsApplication
{
 public partial class Form1 : Form
 {
  public Form1()
  {
   InitializeComponent();
  }
  private void _buttonDecrypt_Click(object sender, EventArgs e)
  {
   string source = _textResult.Text;
   string key = _textKey.Text;
   byte[] b = Convert.FromBase64String(source);
   TribleDES tdes = new TribleDES(Encoding.ASCII, 24);
   byte[] v = tdes.Decrypt(b, key);
   //仕様は全てASCII
   WriteDebug(Encoding.ASCII.GetString(v));
  }
  private void _buttonEncrypt_Click(object sender, EventArgs e)
  {
   string source = _textValue.Text;
   string key = _textKey.Text;
   byte[] b = Encoding.ASCII.GetBytes(source);
 
   TribleDES tdes = new TribleDES(Encoding.ASCII, 24);
   byte[] v = tdes.Encrypt(b, key);
   //byte[]を直接Base64へ変換
   string ret = Convert.ToBase64String(v);
    
   WriteDebug(ret);
  }
  void WriteDebug(string msg)
  {
   StringBuilder sb = new StringBuilder();
   sb.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
   sb.Append(":");
   sb.Append(msg);
   sb.AppendLine();
   Debug.WriteLine(sb.ToString());
   _textDebug.Text +=  sb.ToString();
  }
  public class TribleDES
  {
   Encoding _enc;
   int _keySIze;
   public TribleDES(Encoding enc, int keySize)
   {
    _enc = enc;
    _keySIze = keySize;
   }
   public byte[] Encrypt(byte[] source, string key)
   {
    //TripleDESだけど全てキーが同じです。
    // Tripe DES のサービス プロバイダを生成します
    TripleDESCryptoServiceProvider tDes = new TripleDESCryptoServiceProvider();
    tDes.KeySize = _keySIze * 8;//192; //192bit 24byte KeySize
    byte[] keyBin = _enc.GetBytes(key); //GenerateKey(key, tDes.Key.Length);
    byte[] iv = _enc.GetBytes(key); //GenerateKey(key, tDes.IV.Length);
    // 入出力用のストリームを生成します
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms,
     tDes.CreateEncryptor(keyBin, iv), CryptoStreamMode.Write);
    // ストリームに暗号化されたデータを書き込みます
    cs.Write(source, 0, source.Length);
    cs.Close();
    // 復号化されたデータを byte 配列で取得します
    byte[] destination = ms.ToArray();
    ms.Close();
    // byte 配列を文字列に変換して表示します
    //return _enc.GetString(destination);
    return destination;
   }
   public byte[] Decrypt(byte[] source, string key)
         {
    // Tripe DES のサービス プロバイダを生成します
    TripleDESCryptoServiceProvider tDes = new TripleDESCryptoServiceProvider();
    tDes.KeySize = _keySIze * 8;//192; //最大 192bit 24byte KeySize
    byte[] keyBin = _enc.GetBytes(key); //GenerateKey(key, tDes.Key.Length);
    byte[] iv = _enc.GetBytes(key); //GenerateKey(key, tDes.IV.Length);
    // 入出力用のストリームを生成します
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms,
     tDes.CreateDecryptor(keyBin, iv), CryptoStreamMode.Write);
    // ストリームに暗号化されたデータを書き込みます
    cs.Write(source, 0, source.Length);
    cs.Close();
    // 復号化されたデータを byte 配列で取得します
    byte[] destination = ms.ToArray();
    ms.Close();
    // byte 配列を文字列に変換して表示します
    //return _enc.GetString(destination);
    return destination;
        }
  }
  public class Base642String
  {
   private Encoding enc;
   public Base642String(string encStr)
   {
    enc = Encoding.GetEncoding(encStr);
   }
   public string Encode(string str)
   {
    return Convert.ToBase64String(enc.GetBytes(str));
   }
   public string DecodeString(string str)
   {
    return enc.GetString(Convert.FromBase64String(str));
   }
   public byte[] DecodeByte(string str)
   {
    return Convert.FromBase64String(str);
   }
  }

 }
}

2011年3月11日金曜日

エラー 2 The derived entity type 'User' must be declared in a KnownTypeAttribute on the root entity 'AbstractUser'. HogeHogeProjectが発生した。

⇒これは、WCF RIA Serviceで、継承関係にあるUserモデルとAbstractUserモデルの両方を公開したために、Silverlight側でコードがジェネレイトできずにエラーとなってしまった。

2011年3月10日木曜日

This EntitySet of type 'Kiyo.Web.User' does not support the 'Edit' operation.
が発生した。

↓下記の通りに対応したらうまくいきました。

DTOをWCF RIA Servicesで公開するには
http://d.hatena.ne.jp/taedium/20100507/p1

2011年2月5日土曜日

20歳のときに知っておきたかったこと スタンフォード大学集中講義

3冊目

1)常識は破る。ルールは変える。
2)価値は貨幣価値にとらわれない。
 社会的価値や、働くことの価値や、社会のルールを守る価値や、社会的な人間関係を大事にする。
3)三つのルールを適応する。
 人は管理できるタスクが三つが限界

  


五常の徳について~仁 義 礼 智 信~について

五常の徳について考えてみた

    • 思いやりの心、優しさ、いたわり、他愛、恕の気持ち
    • 所感:一般には思いやり。賢くは恕の気持ちと考える
      孔子「おのれの欲せざるところ、人に施すことなかれ」
      つまり下記の2つだと思う
      1)自分がして欲しいことをして上げる
      2)自分がして欲しくない事を相手にしない
    • 人の正しい道、義理、人助け、助け合い、恩義
    • 所感:正しい行動と考える
      論語の「人の踏み行う正しい道筋」
      つまり自分が正しいと思ったことを貫く信念と考働とだと思う。
    • 礼儀、感謝、謙虚
    • 所感:感謝の気持ち、そしてそれを表現する礼儀作法
      孔子も礼儀作法を重んじた。
    • 考え学ぶ心、善悪を判断する知恵
    • 所感:物の道理を知り、正しい判断を下すことだと思う。
      孟子の云う「是非の心」(世事についてその良し悪しをむやみに気にけける心)
      物事を原理・原則のもと長期スパンや大局的に見つめる必要がある。
    • 嘘をつかない、約束を守る、信用、信頼、人を信じる
    • 所感:積み重ねた結果だと思う。
      人と人との関わり合いの中で信用・信頼の積み上げのこと。
      ただの一度も約束を破ってはならない。
      (約束破りと信用・信頼の比重は、1000対1だと思う。)

所感
人で成り立っている社会なのだから、五常の徳を学び、実践していこうと思う。