(C#)調用Webservice,提示遠程伺服器返回錯誤(500)內部伺服器錯誤

来源:https://www.cnblogs.com/Connaughtyu/archive/2019/02/27/10444141.html
-Advertisement-
Play Games

因為工作需要調用WebService介面,查了下資料,發現添加服務引用可以直接調用websevice 參考地址:https://www.cnblogs.com/peterpc/p/4628441.html 如果不添加服務引用又怎麼做呢?於是又去查看怎麼根據http協議調用webservice並做了個 ...


 因為工作需要調用WebService介面,查了下資料,發現添加服務引用可以直接調用websevice

參考地址:https://www.cnblogs.com/peterpc/p/4628441.html

如果不添加服務引用又怎麼做呢?於是又去查看怎麼根據http協議調用webservice並做了個無參介面測試,如下:

但一做有參的介面調用就提示500錯誤(遠程伺服器返回錯誤(500)內部伺服器錯誤),查了半天資料,大多數都說是ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; 改成ContentType = "text/html";或者在<@Page..%>中設置 ValidateRequest="false" 即可(這裡無需修改Content-type)。結果還是報一樣的錯誤。最後再https://www.jb51.net/article/120015.htm中發現參數是要拼接一下的 (param = HttpUtility.UrlEncode("param1") + "=" + HttpUtility.UrlEncode(num1) + "&" + HttpUtility.UrlEncode("param2") + "=" + HttpUtility.UrlEncode(num2);) ,這樣傳遞int、string類型的參數都沒問題。業務要求傳遞的是圖片二進位轉化的string類型數據,結果還是報500錯誤。經過調試對比發現圖片二進位數據轉化成的string類型數據沒有根據url形式傳遞,而是帶有特殊符號的,知道問題所在就好辦了,把它轉化成有效的url傳輸數據就行,.net也有現成的封裝方法:HttpServerUtility.UrlTokenEncode(bmpBytes),這樣500錯誤也解決了。

測試代碼如下:

 1   protected void Page_Load(object sender, EventArgs e)
 2         {
 3             Bitmap bmp = new Bitmap(System.Drawing.Image.FromFile("C:/Users/TYTD/Desktop/測試樣本/ch_DJI_279.jpg"));
 4             MemoryStream ms = new MemoryStream();
 5             bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
 6             ms.Flush();
 7             //將二進位數據存到byte數組中
 8             byte[] bmpBytes1 = ms.ToArray();
 9             bmp.Dispose();
10 
11             string bmpBytes = HttpUtility.UrlEncode("bmpBytes") + "=" + HttpServerUtility.UrlTokenEncode(bmpBytes1);
12 
13             string url = "http://192.168.0.28:9800/WebService1.asmx/Send_Image";
14             string a = CallServiceByGet1(url, bmpBytes);
15 
16         }
17         public static string CallServiceByGet1(string strURL,string a)
18         {
19             var result = string.Empty;
20             //創建一個HTTP請求
21             byte[] byt = Encoding.UTF8.GetBytes(a);
22             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
23             request.Method = "POST";
24             request.ContentType = "application/x-www-form-urlencoded";
25             request.ContentLength = byt.Length;
26            
27             request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
28             System.IO.Stream outputStream = request.GetRequestStream();
29             outputStream.Write(byt, 0, byt.Length);
30             outputStream.Close();
31 
32             HttpWebResponse response;
33             Stream responseStream;
34             StreamReader reader;
35             string srcString;
36             try
37             {
38                 response = (HttpWebResponse)request.GetResponse();//獲取http請求的響應對象
39             }
40             catch (WebException ex)
41             {
42                 return ex.Message;
43             }
44             responseStream = response.GetResponseStream();
45             reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
46             srcString = reader.ReadToEnd();
47             result = srcString;   //返回值賦值
48             reader.Close();
49 
50             return result;
51         }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 效果展示(尚未完善) using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Threading; using System.Net; using System.Net.S ...
  • 項目中我們常常會碰到一些數據,需要高頻率用到但是又不會頻繁變動的這類,我們就可以使用緩存把這些數據緩存起來(比如說本項目的導航數據,帖子頻道數據). 我們項目中常用到有Asp.Net Core 本身提供的緩存組件MemoryCache以及第三方緩存組件Redis(當然這個不僅僅只用來做緩存工具用). ...
  • 綜合網上資源完成的自己的第一篇博客 網上類似的貼子挺多的,由於情況不太一樣。網上相關帖子都是在 MainWindow 嵌入。我需要在原有客戶端上開發新的插件即用戶控制項庫實現嵌入外部exe。 主要問題:獲取不到視窗句柄。 1、利用系統API實現嵌入。 2、當時在獲取頁面(用戶控制項庫)的句柄問題上碰壁, ...
  • 下載了codesmith 8,連接Mysql卻提示“找不到請求的 .Net Framework Data Provider"。 1,下載MySql.Data.dll:https://dev.mysql.com/downloads/windows/visualstudio/ 下載zip格式的即可,解壓 ...
  • 今天這篇文章我將通過實例代碼帶著大家一步一步通過abp vNext這個asp.net core的快速開發框架來進行Quartz.net定時任務調度的管理界面的開發。大伙最好跟著一起敲一下代碼,當然源碼我會上傳到github上,有興趣的小伙伴可以在文章底部查看源碼鏈接。 作者:依樂祝 原文鏈接:htt ...
  • 在實際業務系統的開發中,往往需要幾個系統協同一起出來同一個資料庫的數據,資料庫可以是同一個資料庫,也可以根據業務拆分的多個資料庫,如我們企業微信的應用、後臺業務管理系統、以及專門為數據提供服務的API服務介面等,這樣可以極大程度上給我們的業務數據提供支撐,並根據不同的特性進行分開管理和維護。 ...
  • 在開發業務管理系統的時候,往往涉及到資產信息及編碼的列印處理,如我們需要對資產信息、條形碼、二維碼一起列印,以便貼在具體資產信息上面,方便微信公眾號、企業微信進行業務處理,那麼編碼的列印就很有必要了,本篇隨筆介紹實際生產環境中的資產編碼列印處理。 ...
  • 一. 原生SQL查詢 接著上篇講。通過 Entity Framework Core 可以在使用關係資料庫時下降到原始 SQL 查詢。 在無法使用 LINQ 表達要執行的查詢時,或因使用 LINQ 查詢而導致低效的 SQL 查詢時非常有用。 原始 SQL 查詢可返回實體類型,或者從 EF Core 2 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...