c# - 如何将 XML 文件转换为 MessageContract 类的实例?

标签 c# wcf messagecontract

我正在尝试针对现有示例消息测试 [MessageContract] 类,并且我正在寻找一种方法来简化开发,方法是将示例消息文件读入我的 [MessageContract] 类并查看它是如何工作的(我在这里处理一个特别复杂的契约(Contract),非 WCF 来源)。

我的 [MessageContract] 类看起来像这样:

[MessageContract(IsWrapped = true, WrapperName = "wrapper", WrapperNamespace = "somens")]
public class RequestMessage
{
    [MessageHeader(Name = "HeaderElem", Namespace = "otherns")]
    public XElement CorrelationTimeToLive { get; set; }

    [MessageBodyMember(Name = "id", Namespace = "somens")]
    public XElement id { get; set; }
}

我可以使用如下代码将文件读入 Message 类的实例中:

var xr = XmlReader.Create("sample_message.xml");
var msg = Message.CreateMessage(xr, int.MaxValue, MessageVersion.Soap12);

但这并不是特别有用,因为它根本不允许我测试我的 [MessageContract] 类。

WCF 的内部某处是一个系统,用于将此 Message 实例转换为特定 [MessageContract] 类的实例,但它是什么?

最佳答案

前几天我刚刚在与同事交谈后学会了如何执行此操作。我认为这就是您要执行的操作。

namespace MessageContractTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string action = null;
            XmlReader bodyReader = XmlReader.Create(new StringReader("<Example xmlns=\"http://tempuri.org/\"><Gold>109</Gold><Message>StackOverflow</Message></Example>"));
            Message msg = Message.CreateMessage(MessageVersion.Default, action, bodyReader);
            TypedMessageConverter converter = TypedMessageConverter.Create(typeof(Example), "http://tempuri.org/IFoo/BarOperation");
            Example example = (Example)converter.FromMessage(msg);
        }
    }


    [MessageContract]
    public class Example
    {
        [MessageHeader]
        public string Hello;

        [MessageHeader]
        public double Value;

        [MessageBodyMember]
        public int Gold;

        [MessageBodyMember]
        public string Message;
    }
}

关于c# - 如何将 XML 文件转换为 MessageContract 类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832376/

相关文章:

c# - 在 Web 服务调用后更改字符串的 XML 列表名称

wcf - 具有字符串返回值(或参数)的 ASMX WebService 强制在 WCF 客户端中生成消息协定

WCF 使用消息协定序列化枚举

c# - 找不到包含 OwinStartupAttribute 错误的程序集

c# - .NET 如何在启动期间访问 TOptions(选项模式)

c# - WCF 内存急剧增加

c# - WCF 自定义绑定(bind)或 basichttpbinding

.net - 将单个数组作为参数的 WCF 操作可以使用 MessageContracts 吗?

c# - 在 URL 或 Session 或其他中存储语言

wcf - 如何在 WCF Web 服务中检测用户代理