wsdlのプライベートフィールドを公開するwsdl.exeで生成されたWCFサービス

StackOverflow https://stackoverflow.com/questions/1602187

  •  05-07-2019
  •  | 
  •  

質問

WCFを使用してC#でwsdlおよびクライアントファーストの開発を行っており(wsdlとクライアントは既に存在し、サーバー側を構築しています)、奇妙な問題があります。 wsdl.exeを使用して.wsdlからコントラクトを生成し、それをビルドしてWCFサービスをWindowsサービスとしてホストできます。

ただし、 http:// localhost / Service?wsdl から取得したwsdlは、パブリックプロパティ(例: OsType の代わりに、 m_OsTypeField を取得します。これは、パブリック OsType プロパティに関連付けられたプライベート変数です。)

この問題があるクラスの1つの属性は次のとおりです。 [System.CodeDom.Compiler.GeneratedCodeAttribute(" wsdl&quot ;," 2.0.50727.3038")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(" code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace =" http://xxxxxxx.com/")]

.NET XMLシリアライザーはプライベートメンバーを無視することになっているため、完全に困惑しています。なぜこれが起こっているのかについてのアイデアはありますか?

役に立ちましたか?

解決

WCFを使用している場合、 wsdl.exe を使用するのではなく、代わりに svcutil.exe を使用する必要があります。

また、標準のWCF DataContractシリアライザーは、[DataMember]属性でマークしたものすべてを喜んでシリアル化します。.NET可視性設定は、データのSOAビューに影響しません。

ただし、コードサンプルからは、DataContractSerializerではなくXml Serializerを使用しているように見えます-おそらくsvcutil.exeではなくwsdl.exeを使用したためです。

svcutil.exeを使用してサーバー側スタブを作成できますか?それでも同じ問題が発生しますか?

マーク

他のヒント

データ契約ではXmlSerializerエンジンを使用していますが、OperationContractではDataContractSerializerを使用しています。

操作コントラクトでXmlSerializerFormatAttributeを適用します

MSDNから http://msdn.microsoft .com / en-us / library / ms732038(v = VS.90).aspx

場合によっては、DataContractSerializerが型をシリアル化するには不十分です。 WCFは、パラメーターのシリアル化にも使用できる代替のシリアル化エンジンであるXmlSerializerをサポートしています。 XmlSerializerを使用すると、XmlAttributeAttributeなどの属性を使用して、結果のXMLをより詳細に制御できます。特定の操作またはサービス全体でXmlSerializerを使用するように切り替えるには、XmlSerializerFormatAttribute属性を操作またはサービスに適用します。例:

[ServiceContract] 
public interface IAirfareQuoteService
{
    [OperationContract]
    [XmlSerializerFormat]
    float GetAirfare(Itinerary itinerary, DateTime date);
}

詳細については、XmlSerializerクラスの使用を参照してください。ここで示すように手動でXmlSerializerに切り替えることは、そのトピックで詳しく説明されているように、特別な理由がない限り推奨されないことに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top