2009年3月25日 星期三
ASP.NET權限不足,無法使用WINDOWS應用程式
撰寫了一個web service掛載於IIS下,web service會透過SKYPE API呼叫本機電腦裡面的應用程式(SKYPE)作發送簡訊的功能。
未發行至IIS下叫用都是正常的,也寫了一個windows form 來叫用確認是可以執行的
但一發布到IIS下,偵錯時卻發生了.. client端程式 出現wait timeout..
開啟web service 偵錯模式,再來看看web service怎說~
web service先參考skype4com.dll,在程式裡new skypeclass()實體為 myskype都OK,下一步
myskype.sendSMS("+886xxxxxxxxx","hello","") 馬上消失,就像正在處理工作一樣程式碼沒有反紅,看不到偵錯情形。
利用try and catch把runtime error抓出來,錯誤顯示
System.Runtime.InteropServices.COMException (0x80040200): Not attached.
於 SKYPE4COMLib.SkypeClass.SendSms(String TargetNumbers, String MessageText, String ReplyToNumber)
於 Service.HelloWorld() 於 c:\Inetpub\wwwroot\WSsendSKYPE2\App_Code\Service.cs: 行 70
怪哉~GOOGLE了很久,沒有一個解決的方法~
問題可能出在"安全性"問題上~
ASP.NET預設使用者使用資源的安全性與windows應用程式預設安全性不同,所以才會有掛載在IIS下的webservice與windows form使用SKYPE.EXE權限不同!
在MSDN tech提到安全性原則部分
有兩個步驟:
1.讓ASP.NET使用者權限提到最高,可以執行、讀取、寫入等等
2.讓SKYPE檔案降低權限可以被設定的使用者群組執行、讀取等
之後再在web service程式碼裡頭加上
System.Diagnostics.Process.Start("Skype.exe"); 允許讀取到此執行檔
System.Diagnostics.Process.Start("Skype.exe");
錯誤顯示 :
{"System.Web.Services.Protocols.SoapException: 伺服器無法處理要求。 ---> System.ComponentModel.Win32Exception: 系統找不到指定的檔案。\n 於 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)\n 於 System.Diagnostics.Process.Start()\n 於 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)\n 於 System.Diagnostics.Process.Start(String fileName)\n 於 Service..ctor() 於 c:\\Inetpub\\wwwroot\\WSsendSKYPE2\\App_Code\\Service.cs: 行 15\n --- 內部例外狀況堆疊追蹤的結尾 ---"}
挖哩,還是讀取不到~>~<~ 不知道是使用者群組原則是否沒有設定好,但我已經把權限都改成"完全控制"了呀?! 之後也試過了web.config 組態設定,還沒試"註冊表"修改~畢竟如果轉移網站的話,不好意思把別人的系統弄掛吧>< 如果web service 可以叫用額外寫的windows form(APP1),而APP1可以使用SKYPE API進行發送簡訊,這樣也許可以完成。只要APP1的路徑掛在IIS下,但不成為ASP.net的成員。不知道這樣的觀念有沒有錯~ 終於找到了這個想法的實現方式~"遠端物件"~~~~~ 利用.net framwork 提供的 remoting namespace把windows application當作遠端物件使用~ 依然要考慮到使用者群組安全性原則~ 但是..這又是一個大議題..依目前程度要花不少時間來看。 想著這個方法的可行性入睡~~~ 也許有另一個方式會比較間接,但可行性有9成!! 利用資料庫當作媒介,讓WEB SERVICE作寫入,另一隻程式做讀取判斷來執行SKYPE 一樣另外寫一個windows application,這隻程式不斷讀取資料庫作判斷。 這樣一來,windows application是在系統管理者的權限下執行而可以使用SKYPE API 再者,移動網站時,也不需要考慮到路徑的問題,只需要多安裝這個application了~ 但,這畢竟是較低級的方法,application 會不斷使用系統資源,還是使用event觸發的方式較能節省系統資源。
2009年2月17日 星期二
web service 建置與使用
當按下執行紐,就會跳出兩個選項
- 建立web.config 以提供偵錯功能
- Ctrl+F5略過偵錯來執行

解決辦法參考 (MSDN)錯誤:偵錯失敗,因為整合式 Windows 驗證沒有啟用

啟用驗證後的執行偵錯畫面


參考資料 MSDN驗證與授權
這份資料也值得一看
~關於ASP.net管理工具的東西
2008年11月6日 星期四
phpmyadmin 安裝
之前講過 IIS 和 PHP安裝了 接下來講 phpmyadmin
我們使用 appserv-win32-2.5.9.exe
憑剛裝好的印象簡要:
1. 設定安裝路徑: C:php
2. 取消勾選安裝apache phphypertext
3. 於IIS 預設的網站點擊右鍵->新增 ->虛擬路徑 路徑為phpmyadmin剛裝好的地方(c:/php/www/phpmyadmin)
這樣就OK了~
2008年6月11日 星期三
php 寫入檔案問題
$handle = fopen("c:/phpsid.txt" , "w+") ;
fwrite($handle , $contents) ;
fclose($handle) ;
出現
Warning: fopen(c:/phpsid.txt) [function.fopen]: failed to open stream: Permission denied in C:\Inetpub\wwwroot\php_pratice_gmapuser\setarea_1.0\setarea.php on line 452
Warning: fwrite(): supplied argument is not a valid stream resource in C:\Inetpub\wwwroot\php_pratice_gmapuser\setarea_1.0\setarea.php on line 453
Warning: fclose(): supplied argument is not a valid stream resource in C:\Inetpub\wwwroot\php_pratice_gmapuser\setarea_1.0\setarea.php on line 454
怪哉~
IIS 主目錄 下: 讀取 、 寫入 指令碼來源存取 都以勾選
使用權限也選擇 指令碼及執行檔
一直無法寫入,不知道哪裡有問題 悶~~
程式碼換成
$handle = fopen("c:/phpsid.txt" , "r") ;
$contents = fread($handle , filesize("phpsid.txt")) ;
fclose($handle) ;
讀取,是可行的~~~
2008年4月21日 星期一
又是防火牆擋PORT (IIS & 防火牆)
繼續我的網頁製作~問題來了 ~ 居然無法連結我的IIS
又來孤狗一下 ~
參考
防火牆擋住 80 port ... 應該是說 被關掉了..
解決:
開啟 網路連線->點擊區域連線->點擊內容->點擊進階->點擊設定值->點擊進階->點擊設定值->選擇標籤 服務
->打勾網頁伺服器(HTTP)
2008年4月2日 星期三
IIS & PHP 安裝
為了避免不必要的干擾 進場前請先把防火牆關掉!!
控制台->新增移除程式->新增疑除WINDOWS元件->勾選 internet windows service (IIS)
勾選 World Wide Web Service ->詳細資料
下載完後解壓縮在 以建立好的C:\PHP下
將 PHP 檔案解壓縮到 C:\php (解壓縮後此目錄下應是數個檔案夾)
將 php5ts.dll、libmysql.dll、php.ini-dist copy 到 C:\WINDOWS 將已 copy 到 C:\WINDOWS 的 php.ini-dist 更名為 php.ini
幾個步驟:
開啟 php.ini 找到 extension_dir = "./" 改成 extension_dir = "C:\php\ext"
找到 ;extension=php_mbstring.dll 改成 extension=php_mbstring.dll
找到 ;extension=php_mysql.dll 改成 extension=php_mysql.dll
找到 ;extension=php_mysqli.dll 改成 extension=php_mysqli.dll
找到 ;date.timezone = 改成 date.timezone = "Asia/Taipei" 將 php.ini 存檔後關閉
PART III 設定 IIS
為了確保使用IIS 要先設定以下一些東西(各種伺服器安裝PHP的指令不同 install.txt 可以參考)
控制台 > 系統管理工具 > Internet Information Services 本機電腦 > 網站 > 預設的網站 按右鍵選內容
出現右邊視窗
ISAPI 標籤業->新增-> name: PHP -> 瀏覽-> 如圖
確定後 ->主目錄標籤頁->設定->新增-> 在執行檔填入 C:\php\php5isapi.dll (或是按 [瀏覽] 找到這個檔案) 副檔名填入 .php 連按兩次 [確定] 如上圖~

最後步驟 讓連結至網站(http://site)時 Web伺服器會載入http://site/index.php
啟用此功能:
找到 [文件] 按 [新增]輸入 index.php,按 [確定]

按確定
測試:
在C:\Inetpub\wwwroot\下 新增文字檔 寫入
<?php
Phpinfo() ;
?>
存檔 檔名 testphp.php
開啟瀏覽器
有顯示VERSION 即成功
但是卻沒有載入mysqli 模組
解決方法….
法一: 我的電腦->檢視系統資訊->進階 標籤頁->環境變數->系統變數部分 雙點擊Path 加上;C:\WINDOWS 路徑(加在最前面) 這個路徑是以上所存放的ini libmysql 路徑,完成之後 重開機! (通常這步就可以了)
法二
測試 MYSQL語法 可否連到DB
寫一簡單PHP 程式 如下 放入wwwroot裡 ~ 開網頁連自己的IIS
連結成功
再來測試 mysqli 語法是否可行
try 去MYSQL 下載更新的 mysqli.dll 換過從php5X.zip裡面的
…1/1 電腦中毒了….
砍完毒 繼續TRY~

刪除前面的";"來取消註解
Reference:
碼上學會 PHP5&MySqL5 ISBN 978 986 6884 05 4
附錄A 12-2 row 20
Q&A:
IIS 無法開啟 "為預期的錯誤"
解決方式 : 關掉SKYPE ~ 因為SKYPE會開啟80 PORT ,IIS預設也是80PORT
避免衝突先關掉SKYPE 重啟IIS,再開啟SKYPE即可
PART III 資料庫伺服器安裝 (略)











