【发布时间】:2010-11-15 14:57:38
【问题描述】:
我目前正在编写一个 C# Web 服务,它有几种方法,其中一种必须接收 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) 内部服务器错误”。如果我删除参数,通过删除字符串生成器和字节码,以及在 Web 服务中没有参数,它可以工作。所以很明显是参数有问题。我实际上想发送更多数据,并且在 Web 服务中使用了 string[] 参数,但这也失败了。
谁能帮忙??
【问题讨论】:
-
您应该先查看错误详细信息,启用详细显示。您是否在调试模式下尝试过这个以查看错误发生的位置?
-
是的,我在 deug 模式下使用,asp.net 应用程序发送请求和 Web 服务接收。但是没有进入调试,估计是因为参数不匹配。
-
能否请您复制您的网络服务方法的签名?我刚刚创建了一个测试服务,使用您发布的代码向它发出了请求,它工作正常。
-
[WebMethod] 公共字符串 IssueTransactionResponse(string args) {
-
我也试过 [WebMethod] public string IssueTransactionResponse(string args) {
标签: c# asp.net web-services http-post