は私がWCFでのメッセージコントラクトとして使用し、次のタイプがあります。WCF DataContractSerializerはコントラクトアトリビュートを選択しません。なぜそうではありませんか?
[MessageContract(IsWrapped = true,
WrapperNamespace = "http://example.com/services",
WrapperName = "EchoRequest")]
public class EchoRequest
{
public EchoRequest() { }
public EchoRequest(String value)
{
Value = value;
}
[MessageBodyMember(Name = "Value",
Namespace = "http://example.com/services",
Order = 0)]
public String Value { get; set; }
}
私はsvcutil.exeを使用して、このタイプのプロキシを生成するとき、私はと通信することが可能であるクライアントを取得それをホストするサービスであり、要素上のXML名前空間はメッセージ契約の属性に従って正しいものです。
インスタンスにMessage.CreateMessage(...)
を使用すると、名前空間はデフォルト(http://schemas.datacontract.org/2004/07/..)に戻ります。 DataContractSerializer
のインスタンスを使用すると、同じことが起こります。私はDataContractSerializer
コンストラクタに名前空間を渡すためにしようと、そして唯一のラッパーは、名前空間に含まれます:この時
var requestMessage = new EchoRequest("hello, world!");
var serializer = new DataContractSerializer(typeof(EchoRequest),
"EchoRequest",
"http://example.com/services");
var stream = new MemoryStream();
serializer.WriteObject(stream, requestMessage);
var data = Encoding.UTF8.GetString(stream.ToArray());
、「データ」である:
<EchoRequest xmlns="http://example.com/services"
xmlns:a="http://schemas.datacontract.org/2004/07/TestClient"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Value>hello, world!</a:Value>
</EchoRequest>
なぜDataContractSerializer
を無視するように見えるんMessageContract
属性? svcutilこの作品を入手しましょうか?
ありがとうございます。私はちょうどこの正確な問題に遭遇し、すぐにあなたの質問を見つけました。 – shambulator