我目前正在编写一个 C# 网络服务,它有几种方法,其中一种必须接收 HTTP POST 请求。我所做的第一件事是更改 Web 服务项目中的 web.config 文件,如下所示。
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpPostLocalhost"/>
<add name="Documentation"/>
</protocols>
</webServices>
我可以在本地运行 Web 服务,当我在浏览器中单击该方法时,我可以看到它处理 HTTP POST 请求并接受 args=string,因为我的 Web 方法签名接受一个名为 args 的字符串参数。然后,我使用下面的代码通过测试 ASP.NET 应用程序对此进行测试,以触发 HTTP POST 请求。
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ConfigurationManager.AppSettings["PaymentHubURL"].ToString());
request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
StringBuilder sb = new StringBuilder();
sb.Append("message_type=");
sb.Append(HttpUtility.UrlEncode("Txn_Response"));
byte[] bytes = UTF8Encoding.UTF8.GetBytes(sb.ToString());
request.ContentLength = bytes.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(bytes, 0, bytes.Length);
}
string test;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
StreamReader reader = new StreamReader(response.GetResponseStream());
test = reader.ReadToEnd();
}
但是当我运行它时,我得到“远程服务器返回错误:(500) 内部服务器错误”。如果我删除参数,通过删除 stringbuilder 和字节代码,以及在 Web 服务中没有参数,它就可以工作。所以很明显是参数的问题。我实际上想发送更多数据,并且在 Web 服务中使用了 string[] 参数,但这也失败了。
有人能帮忙吗??
最佳答案
我建议您重新考虑您的方法。 Microsoft 已经为使用 Web 服务编写了非常棒的库,但是有两种方法可以做到这一点——“添加 Web 引用”和“添加服务引用”。
在你的情况下,你似乎有一个“asmx 网络服务”,所以我建议你在 visual studio 中为你的项目添加一个“网络引用”。这是假设您使用的是 visual studio。
添加此 Web 引用后,您可以通过“新建”-ing 创建您的客户端。您可以在此客户端上执行任何 Web 方法。这是使用 Web 服务的最简单方法。您不必处理任何 http 并发症。
希望这对您有所帮助。
关于c# - .NET Web 服务接收 HTTP POST 请求 (500) 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4185566/