2008/09/26

WCF WebService how to use Server.MapPath function. 如何在WCF WebService裡使用Server.MapPath

為何預設的WCF WebService沒有enable ASP.NET相容模式呢?
因為WCF是微軟新推出的分散式架構解決方案,有些client端的應用程式並不一定是web,
所以也就沒有必要先把ASP.NET相容模式打開,保留了一些彈性。

若開啟ASP.NET相容模式後:

  • WCF 行為就會在下列 ASP.NET 功能上與 ASMX 行為一致:
  • 在 ASP.NET 相容性模式中執行的 HttpContext: WCF 服務可以存取 Current 與其關聯狀態。
  • 檔案架構授權:在 ASP.NET 相容性模式中執行的 WCF 服務可以將檔案系統存取控制清單 (ACL) 附加至服務的 .svc 檔中,以保護自身的安全。
  • 可設定的 URL 授權:在 ASP.NET 相容性模式中執行 WCF 服務時,會強制執行 WCF 要求的 ASP.NET 的 URL 授權規則。
  • HttpModuleCollection 擴充性:由於在 ASP.NET 相容性模式中執行的 WCF 服務會充分參與 ASP.NET HTTP 要求的生命週期,任何透過 HTTP 管線設定的 HTTP 模組都能夠在叫用服務前/後在 WCF 要求上運作。
  • ASP.NET 模擬:如果已經針對應用程式啟用了 ASP.NET 模擬,則透過 ASP.NET 模擬執行緒目前的身分識別來執行的 WCF 服務可能會與 IIS 處理序身分識別不同。 如果同時針對特定的服務作業啟用了 ASP.NET 模擬與 WCF 模擬,則服務實作最終將會透過從 WCF 取得的身分識別來執行。
  • Server.MapPath無法使用是因為在WCF Server端中,HttpContext.Current會是null,所以無法使用。

設定步驟如下:

1. 開啟aspNetCompatibilityEnabled=true



在web.config裡會看到下面這段:


<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />


2. 在Implemente的class加入AspNetCompatibilityRequirements

ITestService.cs :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

[ServiceContract]
public interface ITestService
{
[OperationContract]
void DoWork();

[OperationContract]
string GetLogFilePath();
}


TestService.cs :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Activation;
using System.Web;

[ServiceBehavior]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService : ITestService
{
public void DoWork()
{
}

public string GetLogFilePath()
{
string logFile = "~/res/iislog/100/ex07021023.log.gz";
return HttpContext.Current.Server.MapPath(logFile);
}
}


這樣在client就不會有exception了....

參考資料:


象印不鏽鋼真空保溫瓶(SF-CC20)

2008/09/12

How to use HttpWebRequest object submit form data?

請參考:
p2p.wrox.com Forums - WebRequest/WebResponse form submit problem. HELP!

內容介紹如何使用HttpWebRequest送出form的資料,節錄解答的code如下:

string url="http://www.365articles.com/modules.php?name=Your_Account";
string data="username=gogo&user_password=newnewne&op=login";
byte[] buffer=Encoding.UTF8.GetBytes(data);
string result="";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType ="application/x-www-form-urlencoded";
req.ContentLength = buffer.Length;
//req.Proxy = new WebProxy(proxy, true); // ignore for local addresses
req.CookieContainer = new CookieContainer(); // enable cookies

Stream reqst = req.GetRequestStream(); // add form data to request stream

reqst.Write(buffer, 0, buffer.Length);
reqst.Flush();
reqst.Close();

Console.WriteLine("\nPosting data to " + url);
HttpWebResponse res = (HttpWebResponse)req.GetResponse(); // send request,get response
Console.WriteLine("\nResponse stream is: \n");
Stream resst = res.GetResponseStream(); // display HTTP response
StreamReader sr = new StreamReader(resst);
result=sr.ReadToEnd();
using(System.IO.StreamWriter writer=new StreamWriter("C:\\Temp\\checkcheck.html"))
{
writer.Write(result);
}



source by Mystic

2008/09/10

抓圖程式 url2bmp

雖然現在Vista有內建「剪取工具」可以用來選取抓圖,但對於網頁這種有scroll bar的就沒輒了...
找到一個免費的小工具可以用: url2bmp



直接把url貼上後,按「go」就會產生output.bmp的圖檔放在程式的目錄內,當然也可以自定檔名,
支援.bmp, .png, .jpeg, .tiff 等副檔名,網頁如果太長,可以調整image size的大小。

缺點是只能抓網頁,想抓有scroll bar的視窗程式就沒法度了。

2008/09/05

替代Ultra Edit的文字編輯器 part 2 - Notepad++

Notepad++

相當好用!尤其是語法摺疊的功能,在寫script時一目瞭然...
雖然沒有像Ultra Edit的欄模式編輯,但是可以使用Alt+滑鼠左鍵來替代,作者是位台灣人,開發出這麼好用的軟體真是令人敬佩!

2008/09/04

C# Remove Chinese Char



string txtBody = "中文chinese";
txtBody = Regex.Replace(txtBody , "[\u4E00-\u9FFF]", ""); // 移除中文

結果
---------------

txtBody : "chinese"

會用到的這regex的原因為是為css裡中文註解,搞到utf-8的網頁變亂碼,索性把css內的所有中文給過濾移除(暴力)。


Silicon Power  Ultima Ⅱ I-Series 4GB  隨身碟

2008/09/03

SQL Server 在 charindex 全形及半形判斷上的問題

在預設的情況下,中文的SQL Server的定序設定為Chinese_Taiwan_Stroke_CI_AS, 會把全形及半形視為相同字元,這會影響到我們在SUBSTRING及CARINDEX上的判斷,如果字串內同時有全形及半形的符號,SQL Server皆會把它視為相同的符號...
如果我們在不能改資料庫設定的情況下,如何讓全形及半形的符號有所區隔呢?

直接用以下例子說明:



declare @txt nvarchar(200)
select @txt = '華,碩平,台【重裝火炮】DVD燒錄遊戲電腦'

select charindex(',', @txt)
select charindex(',', @txt COLLATE Chinese_Taiwan_Stroke_CI_AS_WS)


結果:

-----------
2

(1 個資料列受到影響)


-----------
5

(1 個資料列受到影響)

update:
如何執行區分全型/半型的sql select?
select * from aaa(nolock) where aaa_name like '%?%' COLLATE Chinese_Taiwan_Stroke_CI_AS_WS
-- COLLATE Chinese_Taiwan_Stroke_CI_AS_WS放在like的後面



重點就在於預設的COLLATE是Chinese_Taiwan_Stroke_CI_AS,改成Chinese_Taiwan_Stroke_CI_AS_WS就OK了,詳細請參考:

1.Windows Collation Name (Transact-SQL)
2.COLLATE (Transact-SQL)
3.Collation Precedence
4.定序對話方塊 (Visual Database Tools)

PHILIPS移動世界 2.5吋 250G SATA行動硬碟-聯強貨

軟體工程的重要的指標