gpt4 book ai didi

.net - 如何为 WCF 中的 [WebGet] 方法发出裸 XML?

转载 作者:行者123 更新时间:2023-12-03 03:25:08 24 4
gpt4 key购买 nike

如何定义 [OperationContract] [WebGet] 方法来返回存储在字符串中的 XML,而不需要对字符串进行 HTML 编码?

应用程序正在使用 WCF 服务返回已存储为字符串的 XML/XHTML 内容。 XML 不通过 [DataContract] 对应于任何特定类。它旨在由 XSLT 使用。

[OperationContract]
[WebGet]
public XmlContent GetContent()
{
return new XmlContent("<p>given content</p>");
}

我有这门课:

[XmlRoot]
public class XmlContent : IXmlSerializable
{
public XmlContent(string content)
{
this.Content = content;
}
public string Content { get; set; }

#region IXmlSerializable Members

public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}

public void ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}

public void WriteXml(XmlWriter writer)
{

writer.WriteRaw(this.Content);
}
#endregion
}

但是当序列化时,有一个根标签包装给定的内容。

<XmlContent>
<p>given content</p>
</XmlContent>

我知道如何更改根标记的名称 ([XmlRoot(ElementName = "div")]),但如果可能的话,我需要省略根标记。

我也尝试过 [DataContract] 而不是 IXmlSerialized,但它似乎不太灵活。

最佳答案

返回一个 XmlElement。您不需要 IXmlSerialized。您不需要包装类。

示例服务接口(interface):

namespace Cheeso.Samples.Webservices._2009Jun01
{
[ServiceContract(Namespace="urn:Cheeso.Samples.Webservices" )]
public interface IWebGetService
{
[OperationContract]
[WebGet(
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "/Greet/{greeting}")]
XmlElement Greet(String greeting);
}
}

服务实现:

namespace Cheeso.Samples.Webservices._2009Jun01
{
[ServiceBehavior(Name="WcfWebGetService",
Namespace="urn:Cheeso.Samples.WebServices",
IncludeExceptionDetailInFaults=true)]

public class WcfWebGetService : IWebGetService
{
public XmlElement Greet (String greeting)
{
string rawXml = "<p>Stuff here</p>";
XmlDocument doc = new XmlDocument();
doc.Load(new System.IO.StringReader(rawXml));
return doc.DocumentElement;
}
}
}

另请参阅这个类似的问题,但没有 WebGet 的扭曲:
serializing-generic-xml-data-across-wcf-web-service-requests

关于.net - 如何为 WCF 中的 [WebGet] 方法发出裸 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com