我为wcf服务开发了一个客户端页面。基本上我的页面有一个按钮和两个文本框,一个用于从xml文件加载请求xml,另一个用于显示响应xml。 问题是,在从wcf服务获得任何错误后,我的请求xml文本框忽略了所有xml节点,它只显示带有偶数空格的节点值。
这是在一台机器上工作,它不能在另一台机器上工作。 两台机器是windows xp os,即7。
<TextBox ID="requesttextbox" runat="server" TextMode="MultiLine" Width="470px"
Height="300px" Wrap="false/>
按钮点击类似这样的代码
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.XmlResolver = null;
xmlDoc.LoadXml(requesttextbox.Text);
HttpWebRequest objHttpWebRequest = null;
HttpWebResponse objHttpWebResponse = null;
string strFinalRequestXML = xmlDoc.OuterXml;
objHttpWebRequest = (HttpWebRequest)WebRequest.Create("RequestURL");
objHttpWebRequest.Method = "POST";
objHttpWebRequest.Accept = "xml";
objHttpWebRequest.ContentType = "application/xml; charset=utf-8";
objHttpWebRequest.Timeout = 300000;
objHttpWebRequest.ContentLength = strFinalRequestXML.Length;
System.IO.StreamWriter sw = new System.IO.StreamWriter (objHttpWebRequest.GetRequestStream());
sw.Write(strFinalRequestXML);
sw.Close();
try
{
objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
Stream streamResponseText = objHttpWebResponse.GetResponseStream();
StreamReader srFinalResponseText = new StreamReader(streamResponseText, Encoding.UTF8);
txtResponse.Text = string.Empty;
// formattin xml string to as xml nodes to display in textbox
System.Xml.Linq.XElement element = System.Xml.Linq.XElement.Parse(srFinalResponseText.ReadToEnd());
txtResponse.Text = element.ToString();
strStatusCode = objHttpWebResponse.StatusCode.GetHashCode().ToString();
}
catch (WebException objWebException)
{
}
例如:
请求xml&lt; node&gt; test&lt; / node&gt; &LT;节点1&GT;测试;&LT; /节点1&GT;在请求xml文本框内。 从wcf显示错误后显示为“测试测试”。
我对这个问题一无所知。
答案 0 :(得分:1)
如果您确实在使用WCF,则不必使用HttpWebRequest和HttpWebResponse手动调用URL,也不必手动解析XML。您应该将服务添加到服务引用,请参阅:
http://msdn.microsoft.com/en-us/library/bb628652.aspx
如果它不是WCF,而是常规SOAP Web服务,您仍然可以将其添加为Web引用,请参阅:
http://msdn.microsoft.com/en-us/library/bb628649.aspx
然后你可以编写一些更容易的代码:
using (var client = new MyService.MyServiceClient())
{
string foo;
foo = client.MyMethod();
}
至于文本显示,你的catch处理程序中没有任何内容,所以我不确定文本框在哪里可以获得任何类型的值。您必须将其设置在您提供的代码段之外的某个位置。