我目前正在编写一个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)内部服务器错误”。如果我删除参数,通过删除stringbuilder和字节代码,以及在Web服务中没有参数,它的工作原理。所以这显然是参数的问题。我实际上想要发送更多数据,并在Web服务中使用string []参数,但这也失败了。
任何人都可以帮忙吗?
答案 0 :(得分:2)
我建议你重新考虑你的方法。微软已经编写了非常棒的用于使用Web服务的库,但有两种方法可以实现 - “添加Web引用”和“添加服务引用”。
在您的情况下,似乎您有一个“asmx Web服务”,所以我建议您在visual studio中为您的项目添加“Web引用”。这假设您正在使用visual studio。
添加此Web引用后,您可以通过“new”创建客户端。您可以在此客户端上执行任何Web方法。这是使用Web服务的最简单方法。您不必处理任何http并发症。
希望这会有所帮助。
答案 1 :(得分:0)
我猜你错误地构建了HttpPost请求。
尝试使用以下链接中显示的代码来创建您的请求:
http://msdn.microsoft.com/en-us/library/debx8sh9.aspx
或者可能是响应不包含unicode char值
尝试复制并粘贴此代码以获取响应
System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader objSR;
webResponse = (HttpWebResponse)response.GetResponse();
StreamReader reader = webResponse.GetResponseStream();
objSR = new StreamReader(objStream, encode, true);
sResponse = objSR.ReadToEnd();