我想制作这个XML:
<data contentType="text/plain" contentLength="24">
<![CDATA[OK - 12/05/2016 14:45:40]]>
</data>
我的程序运行良好,但我觉得必须有另一种方法来生成这个XML。
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
UriTemplate = "ping")]
Stream PingServer();
public Stream PingServer()
{
string LeUrl = "http://yyyyy.fr/Service1.svc";
string Result = "";
try
{
var myRequest = (HttpWebRequest)WebRequest.Create(LeUrl);
var response = (HttpWebResponse)myRequest.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
// it's at least in some way responsive
// but may be internally broken
// as you could find out if you called one of the methods for real
//Debug.Write(string.Format("{0} Available", url));
Result = "OKE --" + DateTime.Now ;
}
else
{
// well, at least it returned...
//Debug.Write(string.Format("{0} Returned, but with status: {1}", url, response.StatusDescription));
Result = response.StatusDescription;
}
}
catch (Exception ex)
{
// not available at all, for some reason
//Debug.Write(string.Format("{0} unavailable: {1}", url, ex.Message));
Result = ex.Message;
}
WebOperationContext CurrentWebContext = WebOperationContext.Current;
CurrentWebContext.OutgoingResponse.ContentType = "text/plain";
String AnyXml = "<data contentType=\"text/plain\" contentLength=\"24\">"+"><![CDATA[OK - "+DateTime.Now+"]]></data>";
return new MemoryStream(Encoding.UTF8.GetBytes(AnyXml));
}
我认为使用XmlElement
或类似的东西。
我不想自己创建XML语法。
答案 0 :(得分:0)
您可以使用XmlSerializer - 使用适当的System.Xml.Serialization属性(即XmlRoot,XmlAttribute,...)定义数据类型,并使用[XmlSerializerFormat]
声明您的操作。
下面的代码显示了您的方案的可能实现。请注意,它强制使用CData(这就是你在问题中所拥有的),但是如果你不需要它,你就不需要在课堂上拥有额外的属性。
public class StackOverflow_37187563
{
[XmlRoot(ElementName = "data", Namespace = "")]
public class Data
{
[XmlAttribute(AttributeName = "contentType")]
public string ContentType { get; set; }
[XmlAttribute(AttributeName = "contentLength")]
public int ContentLength { get; set; }
[XmlElement]
public XmlCDataSection MyCData
{
get { return new XmlDocument().CreateCDataSection(this.Value); }
set { this.Value = value.Value; }
}
[XmlIgnore]
public string Value { get; set; }
}
[ServiceContract]
public class MyService
{
[WebGet(ResponseFormat = WebMessageFormat.Xml), XmlSerializerFormat]
public Data PingServer()
{
return new Data
{
ContentLength = 24,
ContentType = "text/plain",
Value = "OK - 12/05/2016 14:45:40"
};
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
WebServiceHost host = new WebServiceHost(typeof(MyService), new Uri(baseAddress));
host.Open();
Console.WriteLine("Host opened");
WebClient c = new WebClient();
Console.WriteLine(c.DownloadString(baseAddress + "/PingServer"));
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}