2016年12月27日 星期二

[Error] 這個設定區段不能在這個路徑中使用。當區段在父層級被鎖定時就會發生這種情況。鎖定可能是預設 (overrideModeDefault="Deny"),或是由位置標記使用 overrideMode="Deny" 或繼承的 allowOverride="false" 明確設定。

 

說明 : 佈版調整後,出現錯誤訊息

這個設定區段不能在這個路徑中使用。當區段在父層級被鎖定時就會發生這種情況。鎖定可能是預設 (overrideModeDefault="Deny"),或是由位置標記使用 overrideMode="Deny" 或繼承的 allowOverride="false" 明確設定。

解決 :  到控制台 –> 程式集 –> 開啟或關閉windows功能 –>  去開啟IIS內的 應用程式開發功能,跟asp有相關的打勾即可

image

2016年12月21日 星期三

[C#] 使用IMerage合併 .exe 和 .dll檔案

 

在開發winform,建置後會產生exe跟一些dll檔,如果要把debug測試版給其他人使用時,必須整包都傳給對方才行,相當不方便

因此可以使用IMerage來合併成一個exe,非常方便

 

IMerage 下載位置 https://goo.gl/PP5CN7

安裝完成後

1.先去設定環境變數,加入IMergae.exe的路徑

2.開啟命令提示字元

3.指向專案的exe.dll的資料夾

4.鍵入  ILMerge.exe /out:Merged.exe 你的exe.exe xxx.dll yyy.dll /targetplatform:v4,"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"

最後文字面是指定.net framework 4.0的組件

如何就會在剛剛的資料夾產生新的exe檔案囉!!

 

enjoy!

2016年12月20日 星期二

[C#] 利用反射動態設定物件屬性 Property SetValue in Reflection

 

如果需要使用字串來動態設定屬性的值,可借用反射的方式來達成目的

var model = new Model();

var propertyName = "指定屬性";
Type type = model.GetType();
PropertyInfo propertyInfo = type.GetProperty(propertyName);
propertyInfo.SetValue(model, value);
 
//縮寫成一行
model.GetType().GetProperty(propertyName).SetValue(model, value);

2016年12月19日 星期一

[C#] 解析特定時間格式 Mon, 05 Dec 2016 轉成datetime

 

問題 : 如何將Mon, 05 Dec 2016 轉成一般的datetime?

 

方法 :

var date = DateTime.ParseExact(Mon, 05 Dec 2016 , @"ddd, dd MMM yyyy", CultureInfo.InvariantCulture)                     .ToString("yyyy/MM/dd");

2016年12月12日 星期一

[Error][EF6] 「接近 OFFSET 之處的語法不正確。FETCH 陳述式中的選項 NEXT 使用方式無效」

 

錯誤訊息 :

接近 OFFSET 之處的語法不正確。FETCH 陳述式中的選項 NEXT 使用方式無效

 

原因 :

使用ef6的skip,take時,轉成sql自動產生offset….語法,這在sql server 2008r2並不支援

解法 :

請到.edmx用xml開啟,搜尋2012如下圖,並改成2008 再重新編譯即可

2016-12-12_144713

2016年12月7日 星期三

[Tool] Visual Studio Extension - Snippet Designer

身為工程師,我覺得必備的工具

要一致性、少打錯字,就靠他了 XD

https://msdn.microsoft.com/zh-tw/communitydocs/visual-studio/ta15021401

[Error][EF6] 無法更新 EntitySey ‘xxx’,因為它有DefiningQuery…

紀錄一下

問題 :

123123123

 

原因 : Table沒有設定PK

2016年11月29日 星期二

[AngularJS] 限制字串長度

 

網站顯示時,有時需要限制多少文字長度,然後後面加上…的需求

以下是參考stackoverflow使用ng來解決 :

 

擴充一個filter :

angular.module('ng').filter('cut', function () {
        return function (value, wordwise, max, tail) {
            if (!value) return '';

            max = parseInt(max, 10);
            if (!max) return value;
            if (value.length <= max) return value;

            value = value.substr(0, max);
            if (wordwise) {
                var lastspace = value.lastIndexOf(' ');
                if (lastspace != -1) {
                  //Also remove . and , so its gives a cleaner result.
                  if (value.charAt(lastspace-1) == '.' || value.charAt(lastspace-1) == ',') {
                    lastspace = lastspace - 1;
                  }
                  value = value.substr(0, lastspace);
                }
            }

            return value + (tail || ' …');
        };
    });
 
 
使用上 : 
{{some_text | cut:true:100:' ...'}}

 

參考 : http://stackoverflow.com/questions/18095727/limit-the-length-of-a-string-with-angularjs

2016年11月22日 星期二

[C#] 發信設定移到webconfig


因需求可能調整發信的smtp,所以把設定寫在程式碼內會變得相關不方便

因此建議可以移到webconfig來提升彈性

webconfig 在system.web相同層級加入以下範例

  
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network defaultCredentials="false"
          host="smtp.gmail.comport="25enableSsl="true"
          userName="xx@gmail.compassword="xxcc" />
      </smtp>
    </mailSettings>
  </system.net>


如此一來在程式中就會變成

MailMessage mail = new MailMessage();

mail……內容設定

SmtpClient client = new SmtpClient();

client.Send(mail);

 
是不是更簡潔囉~
 

2016年11月16日 星期三

[Html] 信箱可以用html 加 css ??

 

剛剛遇到客戶回饋說要在信中加入美化的畫面

但設計給的是一般的html 還引用js,css….

當然直接套入發信後,一片空白….

 

後來發現這篇文章說 :

https://css-tricks.com/using-css-in-html-emails-the-real-story/

要套css可以,但是要寫在dom物件內

也就是不能外連也不能使用<style></style>

 

撲吃…聽起來又要回到過去的感覺…

後來電話溝通後,發現是烏龍不是要在美化信件,是連出去的頁面要美化….XDDD

好家在!

2016年11月15日 星期二

[AngularJs] 截圖套件 - ngImgCropExtended


最近遇到客戶需要上傳圖片時加入截圖的流程
換了ng開發後就沒有使用截圖套件了,因此到網上找了一些相關套件

1.ngImgCrop

看了Demo之後覺得不錯,但事後發現一個問題就是他只能固定正方形截圖,
而且截出來的圖必須指定大小,不能依上傳的圖片等比裁切

因此進一步查到有好新人事幫忙擴充 https://github.com/CrackerakiUA/ui-cropper
他提供裁切可以任意矩型,而且可以裁出來可以是原畫質的大小

html 參考 :

<img-crop image="myImage"
          result-image="imgPath"
          area-type="rectangle"
          result-image-size="'max'"
          on-load-done="onLoadDone()"></img-crop>
 
檔案只要把ng-img-crop.js, ng-img-crop.css加入
並在app.module include ngImgCrop 即可使用他的directive囉
 
其他參考demo
Codepen: Circle + Chargement Crop
Codepen: Square + Init Url Crop + Maximum rendered image
Codepen: Rectangle Crop
Codepen: Rectangle Crop + Crop info
Codepen: Rectangle With Aspect Crop and Max Init
Codepen: Rectangle + Aspect + Array Crop
Codepen: Rectangle + CSS Crop
Codepen: Different sizes

[C#] base64 圖存成圖檔


邏輯大致是將base64字串轉成byte陣列再轉成stream存起來


string x = files.Replace("data:image/png;base64,""");
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(x);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
 
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
image.Save(fileMapPath, System.Drawing.Imaging.ImageFormat.Png);

2016年11月10日 星期四

[JS] 解析QueryString


ex. http://localhost:10201/page.html?id=whatever

js取得方式


var parseQueryString = function () {
    var str = window.location.search;
    var objURL = {};
 
    str.replace(
        new RegExp("([^?=&]+)(=([^&]*))?", "g"),
        function ($0, $1, $2, $3) {
            objURL[$1] = $3;
        }
    );
    return objURL;
};


var params = parseQueryString();
 
console.log(params["id"]);

2016年11月1日 星期二

[Error] IIs佈版 無法載入指定的中繼資料資源


IIS 佈版時,因為改了連線字串,結果變成無法載入中繼資料資源
原因是因為使用ef6的連線字串, 如果改錯emdx的路徑,程式就會找不到中繼資料

結論 : webconfig 要小心確認,不要改錯QQ



[Error] EF6 違反多重性條件約束

 

如下圖, 最近遇到資料更新時,因為資料表互相關連,造成無法更新的錯誤

2016-11-01_151018

 

2016-11-01_151055

 

原因 : 我的狀態在於automapping時, 會把子model 的父層屬性一起mapping,造成ef6更新時就報掉,

因此後來將父層屬性ignore 不要一起mapping即可

2016年10月19日 星期三

[Error] System.OutOfMemoryException 播放大檔影片

 

問題 : 先前要上傳大檔(500mb up)的影片,後來調整webconfig允許iis安全性後,又出現播放會out of memory

 

解法

參考 https://weblogs.asp.net/morteza/OutOfMemoryException

如圖下,把64位元版本開啟就ok了

2016-10-19_134951

2016年9月19日 星期一

[Error] 名為 'swagger_docsswagger/docs/{apiVersion}' 的路由已經在此路由集合中。路由名稱必須是唯一的。

 

整個專案移植時,發現如題的錯誤訊息

後來直接把bin跟obj內的資料砍掉重新編譯即可

2016年9月14日 星期三

[C#] 過濾重複的list

 

想要過濾重複的list<T>物件, 在net3.0以上可以直接使用linq .Distinct()方法

List<T> Obj = Obj.Distinct().ToList();

2016年9月8日 星期四

[Error][EF] 新增資料報錯

 

問題 :

2016-09-08_093457

原因 :

發現DB Table 沒有設定到pk, 因此資料庫加pk後,記得重新把ef edmx重新設置,我是移除有問題的table重新新增

重新建置後就ok嚕

2016年8月30日 星期二

[C#] 解壓縮zip檔 出現編碼問題


日前使用DotNetZip library作為壓縮與解壓縮的套件

在一次新專案使用解壓縮時卻頻頻出現亂碼

因此我找了一下可能原因。

第一個 : zip檔內有中文檔名

using (ZipFile zips = new ZipFile(FileUpload.Path, Encoding.Default))


在一開始建立物件時,就決定編碼格式。
 
第二個:檔案內文字出現亂碼

2016年8月20日 星期六

[VS] 調整專案名稱


建議 : 盡量在一開始就確定專案名稱,中途更改專案名稱難保奇妙的問題發生

開始吧 :

1. 對需要修改的專案進入屬性

1

2016年8月5日 星期五

[其他] 更換notepad++ 主題


最近重灌電腦順便記錄一下

先去網路上找一個喜歡的主題

這個黑色主題滿不錯的~
https://github.com/soelinn/Npp-Obsidian-PyCs

下載好後解壓縮出xxx.xml檔案

然後放到C:\Program Files (x86)\Notepad++\themes (預設位置)

之後再開啟notepad++選擇"設定" -> 設定程式語言格式











 然後選擇你的主題
















大功告成囉!

 







2016年8月4日 星期四

[vs2013] 複製程式碼包含html 格式


無意中發現,如果visual studio有安裝power tool擴充套件

在tool -> 選項 -> 展開power tools 會有HTML Copy

預設他就會把你複製出來的程式碼帶上html格式囉


範例 :

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
        routes.MapRoute(
            name: "Default",
            url: "{language}/{controller}/{action}/{id}",
            defaults: new {language="chinese", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

[Testing] 整合測試加入簡易還原


對於一些較簡易的整合測試,又不想重新建立測試資料庫環境的話(時間較久)

可以在測試加入transaction,雖然不會適用所有狀況,但可以做為參考

[TestInitialize]
public void TestInitialize()
{
    //arrange
    scope = new TransactionScope(); 
}
 
[TestCleanup]
public void TestCleanup()
{
    scope.Dispose();
}

參考 : http://goo.gl/dXqbZY


2016年7月20日 星期三

[C#] 泛型反序列化XML


最近因為API需要解析xml,所以整理了一下之前用到反序列化小工具。

 public class XmlHelper
    {
        public static TSource TryPareseXml<TSource>(string xmlString)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(TSource));
            TSource result;
 
            //反序列化
            using (TextReader reader = new StringReader(xmlString))
            {
                try
                {
                    result = (TSource)serializer.Deserialize(reader);
                }
                catch (Exception)
                {
                    return default(TSource); ;
                }
                return result;
            }
        }
    }

[C#] 時間格式設定

 

簡易的方法

string.Format("{0:yyyy/MM/dd hh:mm:ss}", 時間);

2016年7月15日 星期五

[Error] 在唯一金鑰屬性 'name' 設為 'Access-Control-Allow-Origin' 的情況下…

 

2016-07-15_150136

如圖問題,目前是在發佈在網站下的子應用程式下就會出現

如果放在父層(一般IIS網站底下)就沒有此問題,因此父層允許外界ajax呼叫,子層網站亦可受惠

有好有壞,自己衡量。

2016年7月14日 星期四

[C#] 自訂錯誤訊息

public class MyException : ExceptionISerializable
   {
       public MyException()
           : base("丟出自訂例外狀況") { }
       public MyException(string message)
           : base(message) { }
       public MyException(string message, Exception inner)
           : base(message, inner) { }
       protected MyException(SerializationInfo info, StreamingContext context)
           : base(info, context) { }
   }

2016年7月13日 星期三

[NLog] 安裝步驟整理(簡易)


需要記錄資料 :
1.問題發生時間、request路徑、Session等
2.按照時間分類資料夾即可
第一步 : 下載相關組件
進入nuget管理套件畫面下載 NLog、NLog.Extended以及組態檔
1
2016-07-13_145635

第二步: 設定組態
可以參考官方教學 : https://github.com/NLog/NLog/wiki/Tutorial
有使用NLog.Extended記得要額外inlcude

  <extensions>
    <add assembly="NLog.Extended"/>
    <add assembly="NLog.Web"/>
  </extensions>

我的顯示樣版如下 :



直接取代預設的樣版即可
注意在rules 可以設定你需要寫入的層級,也可以寫入不同地坊

第三步 : 呼叫logger執行即可
private static Logger logger = LogManager.GetCurrentClassLogger();


以上



2016年6月24日 星期五

[Error] 找不到中繼資料

 

2016-06-24_143708

問題 :

本機run沒問題,但是發佈後卻出現上述問題,確認DLL都在沒有遺漏,那到底是什麼問題呢?

 

原因 :

1.先前佈版經驗是沒有問題,因此將webconfig互相比對

2.發現原來是release webconfig的metadata是沿用舊專案的資訊,所以跟webconfig有所出入= =

所以之後看到中繼資料無法載入除了dll要注意外還要注意connection是否完整

2016年6月22日 星期三

[C#] 問號運算子複習


不經意看到這篇https://goo.gl/QN8uTc

算是對問號運算子的複習囉~

//第一種
int? a = null;


//第二種
int a = (b == 1) ? c = 2 : c = 3;


//第三種
int a = (s ?? string.Empty).Length;


1.可為空的型別
2.三元運算子
3.判斷變數是否為空並負值

2016年5月20日 星期五

[JS] 連續附值問題 (結論:沒事不要用連續賦值)


今天看到一個JS題目是 :

大大們請教一個js問題
var a = {n:1};
a.x = a = {n:2};
請問a.x 現在是什麼值??


直覺想當然是 {n:2}
但是答案 undefined

又如果題目改成
var a = {n:1};
var b = a;
a.x = a = {n:2};
請問b.x是什麼?

直覺想b.x又沒賦值當然是undefined
但答案又錯了!!

說明可以參考
https://read01.com/k8Py.html
https://goo.gl/PmZvSW



結論 : 沒事別用連續賦值,避免不必要的問題產生!!!!


2016年5月6日 星期五

[C#] 顯示某月份每週幾的日期


首先會利用到日期迴圈 http://todomato.blogspot.tw/2016/01/c-foreach-datetime.html
然後使用 DayOfWeek 來過濾想要的週期,(如週三)即可

2016年5月4日 星期三

[C#] 取得本月的特定日期方法

 

假設要取得每月20號的資訊,變數要如何設定呢?

DateTime FirstDay = new DateTime(DateTime.Now.Year,DateTime.Now.Month, 20);

 

同樣的,如果需要到小時分秒也ok

DateTime FirstDay = new DateTime(DateTime.Now.Year,DateTime.Now.Month, 20, 12, 0, 0);

2016年4月21日 星期四

[Error] 網站無法正常顯示圖片

 

 

2016-04-21_113450

 

解 : webconfig 設定

<modules runAllManagedModulesForAllRequests="true"></modules>

2016年4月18日 星期一

[Error] DI 使用autofac遇到的問題

 

2016-04-18_130649

解 : 要把dll加入參考

 

2016-04-18_102129

解 : webconfig 需設定autofac區段

 

2016-04-18_104937

2016年4月15日 星期五

[Error] 關閉事件檢視器一直挑出警告

 

最近遇到一些狀況,但卻被指出是專案上的問題,因為事件檢視器一直跳出

2016-04-15_154433

為了釐清問題,先將專案的警示關閉

 

<system.web>

<healthMonitoring enabled="false" />

</system.web>

2016年4月6日 星期三

[ElasticSearch] 基礎 Elastic NEST

 

使用Nest第三套件來操作Elastic

https://nest.azurewebsites.net/nest/quick-start.html   官方說明

 

var node = new Uri(" http://192.168.19.14:9200/");
var settings = new ConnectionSettings(node);
var client = new ElasticClient(settings);
client1.Index<string>("Index", "Type", model.ID, json);
 

[HTML] 下載pdf出現空白問題?


 

 

當在使用<a> 連結下載時,下載內容為空白??

檔案放到專案中時,vs會提示把他轉檔,這時不要存檔,不然就會除取空白的東西

 

2016-04-06_095528

2016年3月25日 星期五

[Error] System.Net.Mail.SmtpException: 信箱名稱錯誤。 伺服器回應為: 5.7.1 Reject due to authentication failure of

 

對方提供smtp時遇到發送email三個問題 :

2016-03-25_163917

原因 :  因為之前帳號跟信箱是同一組,這次帳號跟信箱分開,所以報此錯誤

 

2016-03-25_163853

原因 : 過往我們帳號跟信箱往往是一樣,這次遇到的狀況是帳號跟信箱不同,所以以下要做調整

client.Credentials = new NetworkCredential(emailAccount, emailPassword);
MailMessage mail = new MailMessage();
mail.From = new MailAddress(smailEmail);
 
 
2016-03-25_161920
//client.EnableSsl = true;
 

2016年3月23日 星期三

[SQL] sql分頁


分頁sql參考

1.sqlserver 2012 以上-使用offset fetch next  (只是之前在百萬筆資料時,讀取最後頁面此法慢慢的QQ)
                        WITH K AS                           
                       (
                            SELECT {0}
                         FROM Data t
                            where t.IsPublish = 1 
                         {4}
                         ORDER BY {0} {1}
                         OFFSET ({2} - 1) * {3} ROWS FETCH NEXT {3} ROWS ONLY 
                        )
                        SELECT c.[ID]
                        FROM dbo.Data AS c
                        INNER JOIN K ON c.{0} = K.{0}
                        ORDER BY c.{0} {1};
2. 之前使用的 ROW_NUMBER()
                       select *
                        from (
                         SELECT
                          t.ID,
                          ROW_NUMBER() OVER ( ORDER BY  t.{0} {1} ) RN
                         FROM Data t
                         where t.IsPublish = 1 
                         {4} 
                        ) data
                        WHERE RN BETWEEN {2} AND {3} ORDER BY RN";

2016年3月16日 星期三

[NPOI] .Net 匯出到 Excel 利用 NPOI 變更字體尺寸及樣式

 

資料來源http://www.ez2o.com/Blog/Post/csharp-Excel-NPOI-Font-Style

HSSFWorkbook workbook = new HSSFWorkbook();

HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("工作表名稱");

HSSFRow Row = (HSSFRow)sheet.CreateRow(0);

Row.CreateCell(0).SetCellValue("測試文字");

HSSFCellStyle cs = (HSSFCellStyle)workbook.CreateCellStyle();

//啟動多行文字

cs.WrapText = true;

//文字置中

cs.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;

cs.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;

//框線樣式及顏色

cs.BorderBottom = NPOI.SS.UserModel.BorderStyle.DOUBLE;

cs.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;

cs.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;

cs.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;

cs.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.GREY_50_PERCENT.index;

cs.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.GREY_50_PERCENT.index;

cs.RightBorderColor = NPOI.HSSF.Util.HSSFColor.GREY_50_PERCENT.index;

cs.TopBorderColor = NPOI.HSSF.Util.HSSFColor.GREY_50_PERCENT.index;

//背景顏色

cs.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.GREY_25_PERCENT.index;

cs.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;

HSSFFont font1 = (HSSFFont)workbook.CreateFont();

//字體顏色

font1.Color = NPOI.HSSF.Util.HSSFColor.DARK_BLUE.index;

//字體粗體

font1.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;

//字體尺寸

font1.FontHeightInPoints = 25;

cs.SetFont(font1);

Row.GetCell(0).CellStyle = cs;

[SQL] 使用者 'sa' 登入失敗。原因: 帳戶已停用。

 

2016-03-16_153201

 

請確認sa 這個帳號是否有啟用

2016-03-16_153452

2016年3月15日 星期二

[SQL] 遇到百萬筆資料搜尋太慢怎麼辦? 加入索引(Index)

 

最近遇到資料庫主Table有快兩百萬筆資料,然後join的資料表也是百萬級,我使用EF6來做資料查詢,結果一個查詢要5~8秒,實在是不符合需求阿!!

所以最好的改善方式就是加索引,先來看下面的圖

2016-03-15_114910

使用熱鍵ctrl + l 叫出執行計畫,SQLServer2014 很貼心會幫我們分析一句sql,我們可以看出哪邊的會花較多的成本,並建議我們加入索引(圖上綠色部分),真的很貼心。

 

依照建議加入索引後,再執行一次如下圖

2016-03-15_114933

有沒有發現,他的查詢成本變0%,同理我們在把大部分需要查詢的欄位以及常join的FK加入索引,就能很明顯的改善的查詢效能囉。

 

現在我的查詢速度又回到500ms以下,真是太令人開心了。

 

整理一下重點 :

  • 常用join table, 記得幫FK加入index
  • 常搜尋的欄位也記得加入index
  • 注意索引是需要維護的,如果常常會CUD,要記得定期維護!

2016年3月14日 星期一

[SQL] 重灌sql server 2014 遇到資料庫無法還原

 

用很久的sql server 2008r2 終於功成身退,換成sql2014 (其實是被逼的)

然後備份2008的db ,並刪除2008 安裝2014,再還原時發生錯誤!!

 

2016-03-14_131223

 

答案 :

其實最原始的錯誤好像不是上圖的錯誤,這是重製版QQ,內容比較像是說xxxx無法存取,

所以我就發現舊的DATA資料夾內還有原本DB檔案,必須把他移除才能重新還原成功

2016-03-14_131124

提供參考

2016年3月7日 星期一

[MVC] Global 建立排程


如果有定期需要發信或是備份等排程工作,可以開新專案用 WindowService來做,除此之外,這裡用一個偷懶的方式,就是直接在global的Application_Start加入timer 做排程,更進階的排程framework可以參考 ASP.NET 程式中的背景工作 (3) - 使用 Quartz.NET
 
以下展示簡易的方法 :
 
 

2016年2月25日 星期四

[Error] NLog doen't work on IIS

 

問題 :

在開發模式順利紀錄log但佈到iis 卻沒有東西

 

請檢查

1.NLog.config 點擊右鍵屬性,檢查複製到輸出目錄 是否為永遠複製

2.確定iis的資料夾有沒有權限寫入!

2016年2月24日 星期三

[Error] winform 無法安裝或執行此應用程式…需要全域組件快取(GAC)安裝…

 

2016-02-24_134732

問題 :

winform 無法安裝或執行此應用程式…需要全域組件快取(GAC)安裝…

原因 :

原來是我auttomaper 在其他專案已經用nuget安裝了一版,後來在winform專案中include到其他專案,卻安裝最新版的automapper

導致發佈時,沒有把舊的套件加進來

 

解法 :

同步一致的套件即可,看是刪掉舊的或是都更新到最新即可

2016年2月1日 星期一

[IIS][Error] window server 2012 這個設定區段不能在這個路徑中使用。當區段在父層級被鎖定時就會發生這種情況。鎖定可能是預設

問題 :


解決方式 :
至控制台  -> 程式集 -> 開啟或關閉Windows功能 -> 下一步下一步到伺服器角色 並勾選網頁伺服器內的應用程式開發「ASP.NET4.5」 !!





[SQL] sql sa 登入失敗(18456)

摘要:[SQL] sql sa 登入失敗(18456)
狀況 1.sql sa 登入失敗(18456)

解:
1.(local)資料庫按右鍵 -> 屬性
2. 安全性 -> 把SQL Server及驗證模式 打勾!!
3. 重開 try it

如果遇到狀況2 . 就是登入出現與伺服器的連接已成功建立 但在登入程序時發生錯誤。 provider 共用記憶提供者 error 0 管道的另一端上無任何處理程序。
解: 重開機或重新啟動即可!!!

2016年1月27日 星期三

[SQL] 全文索引

 

簡單記錄

DECLARE @SearchWord nvarchar(30)
SET @SearchWord = N'搜尋';

SELECT top 1000 * FROM Table
WHERE CONTAINS(*, @SearchWord)

2016年1月19日 星期二

[Error] 不能將 OriginalValues 用於 Added 狀態的實體

 

問題 :

2016-01-19_171608

 

原因 : 我這裡遇到此狀的原因為某個不允許為null 的欄位為null, 所以新增時產生錯誤!!!

2016年1月15日 星期五

2016年1月13日 星期三

[Google][Error] Google Analytics Api 佈版IIS 系統找不到指定的檔案


前言 : 如果你跟我著我的步驟使用伺服器驗證,那麼當你佈版的時候可能也會遇到跟我一樣的問題:

系統找不到指定的檔案 (The system cannot find the file specified.)

我是本來在本機的IIS佈沒問題,上測試機就丟500…


我試了保哥的文章,也有類似的狀況,但是我沒有成功QQ
最後終於找到方法!!

步驟 :
1. 請到IIS 的應用程式集區
2. 找到你的網站所使用的應用程式集區
3. 進到設定,將”載入使用者設定檔”設為true

2016-01-13_150645

原因 : 預設為false, IIS 就會沒有存取key的權限
參考網站 : http://forums.iis.net/t/1226705.aspx?File+not+found+exception+w3wp+exe+issue+in+IIS+on+test+server+but+no+issues+in+IIS+Express+locally

2016年1月11日 星期一

[SQL] 新增table 欄位


久久沒用,果然很容易生鏽,記錄一下script 新增欄位
//範例
ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}[WITH VALUES]
//

範例 :
//範例
ALTER TABLE MyTable ADD NewField int NOT NULL DEFAULT 10
//
調整欄位結構 :
//調整欄位結構
ALTER TABLE  ApplyInfo ALTER Column IsReserved int NOT NULL
//

2016年1月7日 星期四

[Google] Google Analytics Api 使用教學4 (step by step) 最終回


前言 : 快點給我看結果吧!!!

步驟一 : 我們使用Google 的 Embed API 來呈現,這是官網,裡面有很多相關介紹,尤其是左下方的Query Exploer 可以讓你線上測試自己的搜尋內容唷!!

2016-01-07_175958

步驟二 :  點擊左邊的 Server-side Authorization 裡面的HTML內容設置即可,或是參考下面程式範例 :

<script>
 (function (w, d, s, g, js, fs) {
  g = w.gapi || (w.gapi = {}); g.analytics = { q: [], ready: function (f) { this.q.push(f); } };
  js = d.createElement(s); fs = d.getElementsByTagName(s)[0];
  js.src = 'https://apis.google.com/js/platform.js';
  fs.parentNode.insertBefore(js, fs); js.onload = function () { g.load('analytics'); };
 }(window, document, 'script'));
</script>
<script>
 // 更多api 設定
 // https://developers.google.com/analytics/devguides/reporting/core/dimsmets
 gapi.analytics.ready(function() {

   /**
    * Authorize the user immediately if the user has already granted access.
    * If no access has been created, render an authorize button inside the
    * element with the ID "embed-api-auth-container".
    */
   gapi.analytics.auth.authorize({
  'serverAuth': {
                                'access_token': '從後台得到的token'
                            }
   });


   /**
    * Create a new ViewSelector instance to be rendered inside of an
    * element with the id "view-selector-container".
    */
   var viewSelector = new gapi.analytics.ViewSelector({
  container: 'view-selector-container'
   });

   // Render the view selector to the page.
   viewSelector.execute();


   /**
    * Create a new DataChart instance with the given query parameters
    * and Google chart options. It will be rendered inside an element
    * with the id "chart-container".
    */
   var dataChart = new gapi.analytics.googleCharts.DataChart({
  query: {
    metrics: 'ga:sessions',
    dimensions: 'ga:date',
    'start-date': '30daysAgo',
    'end-date': 'yesterday'
  },
  chart: {
    container: 'chart-container',
    type: 'LINE',
    options: {
   width: '100%'
    }
  }
   });


   /**
    * Render the dataChart on the page whenever a new view is selected.
    */
   viewSelector.on('change', function(ids) {
  dataChart.set({query: {ids: ids}}).execute();
   });

 });
});
</script>

重點,記得把後台得到的token 放進 'access_token' 欄位!!!

然後基本的圖表就會出來囉!!!  終於!!!



ps.細節參數設定請參考此

[Google] Google Analytics Api 使用教學3 (step by step)


前言 : 在第一篇、第二篇我們已經取得金鑰並設定好網站資訊,也把追蹤碼放到我們的網站上,現在我們要在後端利用google 做好的api 去取得該網站的存取token囉

步驟一 : 到你的專案打開nuget 並下載Google.Apis.Analytics…..這個套件,他會連同相關連的dll一起載入
2016-01-07_173356
步驟二 : 我這裡是用.net mvc 示範,所以直接在隨意的Controller內建立一個Action,並填入以下程式碼
/// 
/// Google Analytics
/// 
/// 
public string GetGoogleAnalyticsToken()
{
 // Downloaded from https://console.developers.google.com
 //將自己的金鑰.p12檔放到app_data
 string[] scopes = new string[] { AnalyticsService.Scope.AnalyticsReadonly }; // view and manage your Google Analytics data
 var keyFilePath = HttpContext.Server.MapPath("~/App_Data/你的金鑰檔案名稱.p12");
 var serviceAccountEmail = "你的服務帳號信箱";

 //loading the Key file
 var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
 var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
 {
  Scopes = scopes
 }.FromCertificate(certificate));

 //取得token
 string AuthenticationKey = "";
 if (credential.RequestAccessTokenAsync(CancellationToken.None).Result)
 {
  AuthenticationKey = credential.Token.AccessToken;
 }

 return AuthenticationKey;
}

注意 :
  • 把金鑰放到app_data (看個人習慣)
  • 更改程式碼中的金鑰位置與名稱
  • 把服務帳號的信箱改成你的
  • 出現紅色的程式碼請自己include相關的dll即可

步驟三 : 接下來我們來測試是否順利拿到token,藉由postman我們順利拿到token囉!!
2016-01-07_174800


最後一篇,我們將使用Embed API 展示成果,把得到的token喂給前端google analytics api 就可以順利呈現圖表囉!!


ps. 如果實做過程中你有遇到token無法順利匯入 : 可以參考這篇試試看唷

Google Analytics Api 佈版IIS 系統找不到指定的檔案

[Google] Google Analytics Api 使用教學2 (step by step)

 

前言 : 在第一篇我們已經準備好google開發者帳號的服務金鑰,接下來我們要把服務帳號的信箱加到Google Analytics

2016-01-07_172022

 

步驟一 : 登入Google Analytics網站 (請先註冊唷,簡單略過)

步驟二 : 將服務帳戶信箱加入使用者管理

點選管理 –> 選擇你先前建立的帳戶(略) –> 點選使用者管理 –> 把上一篇文章的gmail新增上去 –> 記得給予檢視與分析權限唷!!!

2016-01-07_172419

註 : 如果先前從未申請過網站,請記得在申請網站後把追蹤碼(script)加自己的網站唷

2016-01-07_173139

 

2016-01-07_173210

 

下一篇我們就會利用google api提供的api取得後端的token!!

[Google] Google Analytics Api 使用教學1 (step by step)


前言 :
今天來整理一下之前使用google analytics api 搭配後端C# 的操作過程,我也是花了不少時間才建起來,希望下次遇到可以更快重複利用唷。
目標 : 希望將下面的google圖表加到自己的網站上
2016-01-07_164447

步驟一: 先註冊Google Developers (簡單略過)
步驟二 :  啟用API服務,Google 很用心,時常更新,所以有時候位置可能跟現在不一樣,但藉著主標題應該還是可以找到的,
2016-01-07_164956
服務太多也是很不容易找的 Open-mouthed smile
2016-01-07_165042
啟用API
2016-01-07_165144
印象中好像會先要你同意OAuth授權,就把基本資料填一下送出囉



2016-01-07_165311
接下來來到憑證,因為我會透過後端取得google token,因次這裡請選擇服務帳戶金鑰
ps. 其他兩種方式可以參考此文章(英文)
2016-01-07_165444
新增一個自己的服務,填寫名稱,並記得勾選P12的金鑰(後端需要此金鑰才能存取token)
2016-01-07_165853
建立後挑出視窗,請記住私密金鑰密碼,後端會用到,然後同時金鑰會跟著下載下來。
2016-01-07_170044
接下來我們要去此服務帳號的mail,未來要把此mail加到Google Analytics的權限內
2016-01-07_170838
記住下面的地址
2016-01-07_171112
OK!!
這邊基本上該註冊該啟用的東西都已經完成了,
我們現在手上會有: 金鑰檔案.p12、金鑰密碼、服務帳戶的mail
接下來就是google analytics網站及程式的部分囉!!
待續…