本文介绍了内部复杂类型中不正确的Soap命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用MessageContract.

Im using the MessageContract.

此处生成了错误的SOAP消息:

Here the wrong SOAP message, which is generated:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
...
</s:Header>
<s:Body>
<BoolValue xmlns="http://my.site/rev2015">true</BoolValue>
<StringValue xmlns="http://my.site/rev2015">HelloWorld</StringValue>
<InnerType xmlns="http://my.site/rev2015" xmlns:a="http://schemas.datacontract.org/2004/07/Server" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:ANotherBool>true</a:ANotherBool>
<a:AnotherStringValue>AnotherHelloWorld</a:AnotherStringValue>
</InnerType>
</s:Body>
</s:Envelope>

< a :ANotherBool>,< a :AnotherStringValue>-不正确.命名空间必须为" http://my.site/rev2015 ".

<a:ANotherBool>, <a:AnotherStringValue> - is not correct. Namespace must be "http://my.site/rev2015".

这是我的代码:

[ServiceContract(Namespace = "http://my.site/rev2015")]
[ServiceKnownType(typeof(InnerType))]
public interface IService1
{
    [OperationContract]
    CompositeType GetDataUsingDataContract(CompositeType composite);
}

[MessageContract(WrapperNamespace = "http://my.site/rev2015", IsWrapped = false)]
public class CompositeType
{
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public bool BoolValue;
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public string StringValue;
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public InnerType InnerType;
}

[MessageContract(WrapperNamespace = "http://my.site/rev2015", IsWrapped = false)]
public class InnerType
{
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public bool ANotherBool;
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public string AnotherStringValue;
}

// impl
[ServiceBehavior(Namespace = "http://my.site/rev2015")]
public class Service1 : IService1
{
    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {...}
}

该怎么做?

推荐答案

必须是

[ServiceContract(Namespace = "http://my.site/rev2015")]
[XmlSerializerFormat]
public interface IService1
{
  [OperationContract]
  [XmlSerializerFormat]
  CompositeType GetDataUsingDataContract(CompositeType composite);
}

[MessageContract(WrapperNamespace = "http://my.site/rev2015", IsWrapped = true)]
public class InnerType
{
  [MessageBodyMember(Namespace = "http://my.site/rev2015")]
  public bool ANotherBool;
  [MessageBodyMember(Namespace = "http://my.site/rev2015")]
  public string AnotherStringValue;
}

1.XmlSerializerFormat

1.XmlSerializerFormat

2.IsWrapped = true

2.IsWrapped = true

这篇关于内部复杂类型中不正确的Soap命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 05:40