私はIClientMessageInspector派生クラスを介してすべての要求と応答を渡す外部Webサービスと通信するアプリケーションを作成しています。これをテストするには、疑問文を書く必要があります。これは、Webサービスメソッドに送信されているオブジェクトを取得し、それをServiceModel.Channels.Messageに変換し、このインスペクタクラスに渡します。ServiceModel.Channels.Messageの作成時にパブリックプロパティのみをシリアル化します。
オブジェクトは、次のようになり、一般的なWSLD自動生成されたクラス、されています。私のモッククラスで
public partial class CreditInquiry : object, System.ComponentModel.INotifyPropertyChanged {
private InquiryHeader inquiryHeaderField;
private IndividualInquirySubscriberCategory subscriberCategoryField;
[...]
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public InquiryHeader inquiryHeader {
get {
return this.inquiryHeaderField;
}
set {
this.inquiryHeaderField = value;
this.RaisePropertyChanged("inquiryHeader");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public IndividualInquirySubscriberCategory subscriberCategory {
get {
return this.subscriberCategoryField;
}
set {
this.subscriberCategoryField = value;
this.RaisePropertyChanged("subscriberCategory");
}
}
[...]
}
、私はこのようなMessageオブジェクトを生成しています:
var requestType = request.GetType();
var knownRequestTypes = new HashSet<Type>();
GetTypesInClass(ref knownRequestTypes, requestType);
var requestMessage = Message.CreateMessage(MessageVersion.Default, "", request, new DataContractSerializer(requestType, knownRequestTypes));
GetTypesInClass()メソッドを通過しますリクエストタイプを定義し、そこで使用されるすべてのプロパティとフィールドのタイプを追加し、requestはWSメソッドに送信されるオブジェクトです。
結果Iは要求メッセージオブジェクトに対してtoString()メソッドを呼び出すときに、私は、次の表現を取得:私はそれを期待するよう代わり
<creditInquiry>
<inquiryHeader>
[....]
</inquiryHeader>
<subscriberCategory i:nil="true" />
</creditInquiry>
の
<creditInquiry>
<PropertyChanged xmlns:d5p1="http://schemas.datacontract.org/2004/07/System.ComponentModel" i:nil="true" />
<inquiryHeaderField>
[....]
</inquiryHeaderField>
<subscriberCategoryField i:nil="true" />
</creditInquiry>
を。 CreateMessageは実際にオブジェクトのプライベートフィールドをシリアル化し、パブリックプロパティを無視します。これは何とか回避できますか?残念ながら、手動でメッセージを生成するのは初めてです。希望のオブジェクト表現を取得するために、CreateMessageに渡す必要があるいくつかの追加パラメータがありますか?
ありがとうございます!
私はできないため、このようなあなたの宣言を変更します。 – user2551138
変更を行う準備ができていない場合は、出力がどのように変化すると思いますか?あなたはそれで生きなければなりません。 –
どうやらWCFは、自動生成されたクラスを使ってWSメソッドを実行すると、publicプロパティのみでXMLオブジェクトをシリアル化します。私はこのロジックを手動で複製したいだけです。 – user2551138