正在将XML发布到中的Web服务.NET C#并接收响应
本文关键字:NET 服务 响应 Web XML | 更新日期: 2023-09-27 18:00:05
我正在使用C#向Web服务发布XML文件,但在请求响应"服务器错误-500-不允许您访问系统"时出错。任何帮助都将不胜感激。
protected void Page_Load(object sender, EventArgs e)
{
WebRequest req = null;
WebResponse rsp = null;
try
{
string fileName = Server.MapPath("~''test.xml");
string uri = "http://212.170.239.71/appservices/http/FrontendService";
req = WebRequest.Create(uri);
//req.Proxy = WebProxy.GetDefaultProxy(); // Enable if using proxy
req.Credentials = new NetworkCredential("myusername", "mypassword");
req.Method = "POST"; // Post method
req.ContentType = "text/xml"; // content type
// Wrap the request stream with a text-based writer
StreamWriter writer = new StreamWriter(req.GetRequestStream());
// Write the XML text into the stream
writer.WriteLine(this.GetTextFromXMLFile(fileName));
writer.Close();
// Send the data to the webserver
rsp = req.GetResponse(); //I am getting error over here
StreamReader sr = new StreamReader(rsp.GetResponseStream());
string result = sr.ReadToEnd();
sr.Close();
Response.Write(result);
}
catch (WebException webEx)
{
Response.Write(webEx.Message.ToString());
Response.Write(webEx.StackTrace.ToString());
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
Response.Write(ex.StackTrace.ToString());
}
finally
{
if (req != null) req.GetRequestStream().Close();
if (rsp != null) rsp.GetResponseStream().Close();
}
}
//Function to read xml data from local system
/// <summary>
/// Read XML data from file
/// </summary>
/// <param name="file"></param>
/// <returns>returns file content in XML string format</returns>
private string GetTextFromXMLFile(string file)
{
StreamReader reader = new StreamReader(file);
string ret = reader.ReadToEnd();
reader.Close();
return ret;
}
500错误来自服务本身,这意味着您没有必要的访问权限,消息看起来是自定义的,由服务的编写者返回,所以看起来您正在点击它并得到响应,但也许您的凭据是错误的?代码看起来是正确的——我首先要检查的是你输入的用户名和密码是否绝对正确。
我遇到了同样的问题,并通过设置代理来解决。这是我的示例工作代码,它可能会对某人有所帮助:)
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(WebRequestPath);
myReq.Method = "POST";
myReq.ContentType = "text/xml; encoding=utf-8";
myReq.Timeout = 180000;
myReq.KeepAlive = true;
myReq.Headers.Add("SOAPAction", "http://tempuri.org/AmaliPostData");
myReq.Accept = "gzip,deflate";
byte[] PostData = Encoding.UTF8.GetBytes(xmlString.Trim());
myReq.UseDefaultCredentials = false;
NetworkCredential cred;
cred = new NetworkCredential(WebRequestUname, WebRequestPassword);
myReq.Credentials = cred;
myReq.Host = WebRequestHost.Trim();
myReq.Credentials = new System.Net.NetworkCredential(WebRequestUname, WebRequestPassword);
myReq.PreAuthenticate = true;
string SetProxy;
SetProxy = WebRequestProxy; // something like this... "10.2.0.1:8080";
var proxyObject = new WebProxy(SetProxy);
myReq.Proxy = proxyObject;
try
{
var writer = myReq.GetRequestStream();
writer.Write(PostData, 0, PostData.Length);
writer.Close();
}
catch (Exception ex)
{
WriteLog(" Writer Exception " + ex.Message + ex.InnerException + " host : " + myReq.Host);
}
HttpWebResponse response = (HttpWebResponse)myReq.GetResponse();
string resp;
using (var responseStream = response.GetResponseStream())
{
using (var sr = new StreamReader(responseStream))
{
resp = sr.ReadToEnd();
}
}