.NET Web服务收到HTTP POST请求(500)内部服务器错误
我目前正在编写一个C#web服务,它有几个方法,其中一个必须接收HTTP POST请求。我做的第一件事就是改变web服务项目中的web.config文件,如下所示。.NET Web服务收到HTTP POST请求(500)内部服务器错误
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpPostLocalhost"/>
<add name="Documentation"/>
</protocols>
</webServices>
我可以在本地运行Web服务,当我在浏览器上的方法点击,我可以看到它处理HTTP POST请求,并接受ARGS =字符串,因为我的Web方法的签名接受一个字符串参数命名参数。然后,我使用下面的代码通过一个测试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 []参数,但这也失败了。
任何人都可以帮忙吗?
我可以猜测你错误地构建了HttpPost请求。
尝试使用代码显示在下面的链接,以创建您的要求:
http://msdn.microsoft.com/en-us/library/debx8sh9.aspx
或者probabily响应不包含Unicode字符值
尝试复制并粘贴此代码得到回应
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();
我建议你重新考虑你的方法。微软已经编写了用于使用Web服务的非常棒的库,但有两种方法可以实现它 - “添加Web引用”和“添加服务引用”。
就你而言,你似乎有一个“asmx网络服务”,所以我建议你在Visual Studio中为你添加一个“web引用”项目。这假设你正在使用visual studio。
添加此Web引用后,您可以通过“新建”来创建客户端。您可以在此客户端上执行任何Web方法。这是使用Web服务最简单的方法。你不必处理任何http复杂问题。
希望这会有所帮助。
你应该首先看错误细节,启用细节显示。你是否在调试模式下尝试了解错误发生的位置? – Artemiy 2010-11-15 15:05:23
是的,我在德鲁模式下使用,asp.net应用程序发送请求和Web服务接收。但它并没有进入调试,假定因为参数不匹配。 – Neil 2010-11-15 15:09:38
您可否复制您的网络服务方法的签名?我刚创建了一个测试服务,用你发布的代码向它发出了一个请求,并且它工作正常。 – 2010-11-15 16:47:40