台灣最大程式設計社群網站
線上人數
1166
 
會員總數:242929
討論主題:187836
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 有關WebService問題求解
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
有關WebService問題求解
價值 : 5 QP  點閱數:271 回應數:14

樓主

賴毅仲
門外漢
0 2
46 5
發送站內信

小弟我在寫了一支簡單的webservice(傳三個值,回傳字串)到iis上,IIS本機端利用post方式傳資料都能正常回傳資料,為何客戶端都會出錯呢?如果是權限設定問題請教如何去設定呢? IIS上 還是 CONFIG上?

另一個問題有關vs媕Y的
web.config web.debug.config web.realse.config
這三個設定檔如果是要發布到外部使用是不是只要更改web.realse.config就可以了?求解!感恩!



==============報錯內容====================
執行階段錯誤
描述: 伺服器上發生應用程式錯誤。此應用程式的目前自訂錯誤設定因安全性考量,防止他人從遠端看見應用程式錯誤的詳細資訊。然而,可以使用本機伺服器電腦上的瀏覽器檢視。

詳細資料: 若要在遠端電腦檢視此特定錯誤訊息的詳細資訊,請於目前 Web 應用程式根目錄內的 "web.config" 組態檔中建立 <customErrors> 標記。然後將 <customErrors> 標記的 "mode" 屬性設為 "Off"。
==========================================


==============config======================
<webServices>
<protocols>
<add name="HttpPostLocalhost"/>
<add name="HttpGet"/><add name="HttpPost"/>
<add name="HttpPostLocalhost"/>
<add name="HttpSoap"/>
</protocols>
</webServices>

<system.web>
<authorization>
<allow users="*"/>
</authorization>
<customErrors mode="Off"/>
</system.web>
===========================================

=============html==========================
method=POST action='http://172.21.10.100/service/webservice1.asmx/FormatJson'>
Id:<input type="text" size="5" name='i'\"></td>
Name:<input type="text" size="5" name='n'\"></td>
Salary:<input type="text" size="5" name='s'\"></td>
<input type=submit value="Subtract"> </td>
</form>
=============================================

搜尋相關Tags的文章: [ Webservice權限設定 ] ,
本篇文章發表於2018-07-23 14:04
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
web.config 才是真正的設定檔,
其他2個都不是...

=======================

除錯時期, 可以考慮把web.config內的customErrors參數設成 Off (第一個字是大寫的 O )
這樣的話發生錯誤就可以看到詳細的錯誤訊息
本篇文章回覆於2018-07-23 16:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

MIS2000 Lab
檢舉此回應
您的 IIS上面,放置Web Service的網站或是目錄
有設定為「應用程式」嗎?
本篇文章回覆於2018-07-23 20:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

賴毅仲
檢舉此回應
你好!回1F & 2F大大們~

1.小羊:
我 Config 堙A確實加了 <customErrors mode="Off"/> 大小寫有注意!但還是沒有錯誤的反饋!? 不知道是哪個環節出問題了~求解!!


2. MIS2000 LAB大
我有使用IIS的虛擬目錄(連線身分>應用程式使用者(通過驗證) > 轉 應用程式,這個動作有做。 還是一樣的錯誤訊息!! 路徑底下的目錄我都給予IUSR權限開到最大~~
還是請求解答~~感恩!!謝謝!!
本篇文章回覆於2018-07-24 09:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

MIS2000 Lab
檢舉此回應
Q : IIS本機端利用post方式傳資料都能正常回傳資料,為何客戶端都會出錯呢?

請問您的客戶端,是在公司內部測試?
還是外部的客戶連上來呢?

Web Service其實也是一種網頁啦
會是防火牆擋住嗎?
本篇文章回覆於2018-07-24 09:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
樓主您好
您目前最最需要的,是把真正的錯誤訊息秀出來

1.問題都還沒釐清,先別急著把IUSER的權限放大,權限放大這件事,是最不需要的一件事
2.如果您在顧客IIS Server上,有太多的Config,建議把沒必要的刪除(不要混淆視聽)
web.config(保留)
web.debug.config(刪掉)
web.realse.config(刪掉)
3.確認保留下來的web.config他有


要寫在對的位置
如果可以遠端登入該IIS的話,比較推薦使用『RemoteOnly』
這樣外部看不到訊息,避免駭客得到資訊,而管理者可以從Server直接執行網頁,看到真正的錯誤訊息

如果無法登入IIS的話,那暫時把他設定為『Off』,但務必記得,得到正確錯誤訊息後,立即改回RemoteOnly

取得真正的錯誤訊息,再請您貼出來,這樣問題明朗了,解決的方式就比較可能有方向

^_^


本篇文章回覆於2018-07-24 09:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

賴毅仲
檢舉此回應
LAB大大:
我是在公司內部測試的! 基本上在內部網路的網段測試的! 防火牆如果有阻擋 80 PORT 的話,理當連 WEB頁面都看不到。
目前還是無解~~~ T .. T" 我的環境是 SERVER 2012 R2 IIS7.0 防火牆全關 每個資料夾(虛擬目錄)我也開了 IUSR的權限了.
我也啟用 匿名登入~ 還有其它可能造成的原因嗎?

頂貓大:
權限這段謝謝你的建議跟專業見解!! 目前config 我設定完 Off 或 Remoter 遠端仍然不行看到msg ,怪的是SERVER端並沒有錯誤! 正常可以return值~ T..T"
有沒有其他方法可以確認權限是否足夠!? 我爬文有看到~只要權限夠的話~自帶編譯後的網頁,直接view *.asmx應該是可以看到網頁的 function ,我試圖這樣做
仍然在客戶端看不到可以直接使用的function~~~求解~~謝謝!!!!!!

本篇文章回覆於2018-07-24 19:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
==============報錯內容====================
執行階段錯誤
描述: 伺服器上發生應用程式錯誤。此應用程式的目前自訂錯誤設定因安全性考量,防止他人從遠端看見應用程式錯誤的詳細資訊。然而,可以使用本機伺服器電腦上的瀏覽器檢視。

詳細資料: 若要在遠端電腦檢視此特定錯誤訊息的詳細資訊,請於目前 Web 應用程式根目錄內的 "web.config" 組態檔中建立 <customErrors> 標記。然後將 <customErrors> 標記的 "mode" 屬性設為 "Off"。
==========================================


這段錯問訊息
他的意思是
為了安全起見,不顯示真正的錯誤內容
如果想要看真正的錯誤內容,可以在本機(Server機器)上,開瀏覽器直接執行
所以他預設的應該就是RemoteOnly
這裡完全沒有提到權限的問題
不知道您為何要猜測是權限出了問題

怪的是SERVER端並沒有錯誤! 正常可以return值~ T..T

這意思是,相同的操作,在Server端不會出現錯誤,完全正常,是這樣子嗎?

本篇文章回覆於2018-07-24 20:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

賴毅仲
檢舉此回應
頂貓大大:

沒錯!! 正是因為只有客戶端會報錯,唯獨在server端view 跟 程式編譯後測試卻正常。故我只能研判跟權限有關吧!! 小弟苦惱了!!
本篇文章回覆於2018-07-25 09:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
另一個方向提供您參考

透過NLog,當有錯誤時,將錯誤訊息記錄下來(可以用檔案、資料庫、系統Log)
然後操作一次,再去查Log,看看真正的錯誤是什麼

NLog的撰寫與使用,您可參考以下這個
http://kevintsengtw.blogspot.com/2011/10/nlog-advanced-net-logging-1.html

或者小喵的這一篇後半的部分
https://dotblogs.com.tw/topcat/2014/08/04/146159

^_^
本篇文章回覆於2018-07-25 10:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

賴毅仲
檢舉此回應
頂貓大大:
謝謝你給了除錯的方案。

後來 我在os event log 上看到以下錯誤 先post出給各位高手過目,還在努力處理看看! 如果有見解~再請不吝指教。


Event code: 3005
Event message: 發生未處理的例外狀況。
Event time: 2018/7/25 下午 02:48:36
Event time (UTC): 2018/7/25 上午 06:48:36
Event ID: 2e9e2dd85b1b4e118e917112b5203447
Event sequence: 4
Event occurrence: 1
Event detail code: 0

Application information:
Application domain: /LM/W3SVC/1/ROOT/service-2-131769749161739028
Trust level: Full
Application Virtual Path: /service
Application Path: C:\inetpub\wwwroot\service\
Machine name: TW-SR6002

Process information:
Process ID: 4500
Process name: w3wp.exe
Account name: IIS APPPOOL\.NET v4.5

Exception information:
Exception type: InvalidOperationException
Exception message: 無法辨認要求格式,因為 URL 未預期地以 /FormatJson 結束。
於 System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response)
於 System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
於 System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
於 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
於 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)



Request information:
Request URL: http://172.21.10.100/service/webservice1.asmx/FormatJson
Request path: /service/webservice1.asmx/FormatJson
User host address: 172.21.8.57
User:
Is authenticated: False
Authentication Type:
Thread account name: IIS APPPOOL\.NET v4.5

Thread information:
Thread ID: 8
Thread account name: IIS APPPOOL\.NET v4.5
Is impersonating: False
Stack trace: 於 System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response)
於 System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
於 System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
於 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
於 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


Custom event details:
本篇文章回覆於2018-07-25 15:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Josh
捐贈 VP 給 Josh 檢舉此回應
請問下您web.config 是否有設定protocols?
連結參考看看
http://lingpiano.pixnet.net/blog/post/237950492-%E3%80%90%E5%85%B6%E4%BB%96%E3%80%91webservice%E7%9A%84http-post%E5%95%8F%E9%A1%8C
本篇文章回覆於2018-07-27 16:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

龍貓王
檢舉此回應
客戶端會報錯,唯獨在server端view 跟 程式編譯後測試卻正常。故我只能研判跟權限有關吧!! 小弟苦惱了!!

客戶端連Server 端的WebService ?
客戶端網頁直接打Server端IP和 XXXXX.asmx 也看不到可用function?
會不會是Server 端有防火牆擋掉了外部連線之類

WebService 裝在Server Server本機網頁能看到 function 應該就是有正常運作
本篇文章回覆於2018-07-30 15:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

賴毅仲
檢舉此回應
謝謝貓大 & LAB 大~~
也感謝各位精闢的見解!!

最後發現的問題其實是我 發行的方式有問題!以致無法正確顯示頁面!!
我直接在專案資料夾 把 Bin資料夾 及 *.asmx直接複製到IIS 的路徑底下就發生以上無解的現象! 後面改用發行到file server方式即正常了!!
小弟無知~也請各位先進瘦小弟一拜!!!

點數我還是分配給兩位大佬~謝謝你們!!
本篇文章回覆於2018-08-01 09:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

MIS2000 Lab
檢舉此回應
我也是這樣做的,都OK
-- 我直接在專案資料夾 把 Bin資料夾 及 *.asmx直接複製到IIS 的路徑底下

但會在IIS裡面設定Web Service的目錄為 "應用程式"
這目錄下,有 /bin目錄 /App_Code目錄 與 .asmx程式
本篇文章回覆於2018-08-01 09:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.