代码之家  ›  专栏  ›  技术社区  ›  Doug Domeny

如何为WCF中的[WIGet]方法发出裸XML?

  •  10
  • Doug Domeny  · 技术社区  · 17 年前

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

    [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>
    

    我也尝试过使用DataContract替代IXmlSerializerable,但它似乎不够灵活。

    1 回复  |  直到 17 年前
        1
  •  8
  •   Community Mohan Dere    9 年前

    返回XmlElement。你不需要IXmlSerializable。你不需要包装类。

    示例服务接口:

    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;
            }
        }
    }
    


    serializing-generic-xml-data-across-wcf-web-service-requests .

    推荐文章