none
windowsForm呼叫webservices的錯誤 RRS feed

  • 問題

  • deal all
    我寫了一個webserivces(.asmx)有function 如下
    public function my_webservice_ExecuteQuery(ByVal My_constr As String , ByVal my_sqlStr As String ) As DataTable
    Dim My_tb as new DataTable("Table01")
    using SybCon as new OleDBConnection()
    SybCon.ConnectionString = My_constr
    dim adp as new OleDbDataAdapter(my_sqlStr,SybCon)
    adp.Fill(My_tb)
    end using
    return My_tb
    end function 
    放上我電腦的iis上,用ie執行結果正常
    另外寫個windowsform的專案來叫它程式如下:
    public Sub WebService_ExecuteQuery(ByVal my_sqlStr as string,ByRef tmpTable as Data.Datatable)
    dim Constr as string = "....."
    dim ws as new serviceReference.webserviceSoapClient
    try
    tmptable = ws.my_webservice_ExecuteQuery(Constr,my_sqlStr)
    catch ex as Exeaption
    end try
    end Sub
    執行結果也正常
    接著我把windowsform專案編譯成的執行檔copy到同事電腦執行:
    結果得到 : 伺服器無法處理要求:-->沒有錯誤訊息,編碼:E_FAIL(0x80004005)
    我再寫一個網頁程式用跟windowsform一樣的方法呼叫,結果正常,放上iis也正常,從同事用ie連到我iis執行這個網頁也正常,
    但windowsform就是不行,連在同事電腦的開發環境執行都同樣的錯誤
    google了好幾天了,找不到解法,
    不解的是網頁都正常,windowsform只有在我電腦上執行才正常.在別的電腦就不行???
    請各位前輩指導一下,感恩!!感恩!!


    2016年8月8日 下午 03:12

解答

  • 先不論你程式上的錯誤,你確定你這樣寫好嗎?

    別人可以自由的傳 SQL,如果傳的是 DROP TABLE 你要怎麼處理?

    再者,Access 並不適合多人使用,光是 INSERT / UPDATE / DELETE 同一時間就只能有一個人呼叫,SELECT 時大概也只能同時 255 人,

    Ref: http://web.archive.org/web/20150511152805/http://databases.aspfaq.com/database/what-are-the-limitations-of-ms-access.html

    回到你的問題,建議你在 Web Service 那裡用 try/catch 加上 log 去捕捉真正的錯誤訊息。

    不過就經驗來看,權限的問題比例最高。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 王振賢 2016年8月13日 下午 01:59
    2016年8月9日 上午 12:56
    版主

所有回覆

  • 您好,

    請問有檢查 winform 程式 加入 Webservice 參考的路徑是否正確呢?


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2016年8月8日 下午 03:18
  • 謝謝你,有啊!!所以在我的電腦上才能正確執行,用webForm也正常.
    2016年8月8日 下午 10:13
  • 先不論你程式上的錯誤,你確定你這樣寫好嗎?

    別人可以自由的傳 SQL,如果傳的是 DROP TABLE 你要怎麼處理?

    再者,Access 並不適合多人使用,光是 INSERT / UPDATE / DELETE 同一時間就只能有一個人呼叫,SELECT 時大概也只能同時 255 人,

    Ref: http://web.archive.org/web/20150511152805/http://databases.aspfaq.com/database/what-are-the-limitations-of-ms-access.html

    回到你的問題,建議你在 Web Service 那裡用 try/catch 加上 log 去捕捉真正的錯誤訊息。

    不過就經驗來看,權限的問題比例最高。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 王振賢 2016年8月13日 下午 01:59
    2016年8月9日 上午 12:56
    版主
  • 您好,

    有查到以下的文章,你可以參考一下

    https://support.microsoft.com/zh-tw/kb/238971


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2016年8月9日 上午 02:20
  • 把以下的程式碼寫完整

    catch ex as Exeaption
    end try

    執行看看, 再把錯誤訊息貼上來

    2016年8月9日 上午 03:04
  • 編譯成 x86 / ASP.NET 設定為 x86 先測一下。

    有可能是 COM 物件傳遞錯誤。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2016年8月9日 下午 02:39
  • 謝謝小朱前輩的指點.

    確實在安全性上考慮不周,所以放棄這樣寫法,錯誤就不細查了

    2016年8月13日 下午 01:59
  • 謝謝各位前輩指點..己放棄這個寫法..謝謝大家!!
    2016年8月13日 下午 02:01