2016-03-30 8 views
0

私はsvcutilを使用してプロキシクラスを作成していますが、私は異なるサービスに対して異なる結果を得ていることに気付きました。最初のサービスのための異なるサービス用にMessageContractAttributeまたはOperationContractAttributeを生成するためのsvcutil

svcutil http://server/SomeService.asmx 
    /l:c# 
    /syncOnly 
    /out:C:\ISomeService 
    /config:C:\ISomeService.config 
    /namespace:*,SomeServiceProxy 

プロキシクラスは、このようなコードを生成します:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] 
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] 
[System.ServiceModel.MessageContractAttribute(WrapperName = "GetSecondService", WrapperNamespace = "http://somenamespace.com", IsWrapped = true)] 
public partial class GetSecondServiceRequest 
{ 
    ... 
} 
:第2のサービスのための

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] 
[System.Runtime.Serialization.DataContractAttribute(Name="GetFirstService", Namespace="http://othernamespace.com")] 
public partial class GetFirstServiceRequest : SomeServiceProxy.ResponseInfoBase 
{ 
    ... 
} 

とプロキシクラスがこれを生成する

私はこのsvcutilコマンドを使用しています

1つのクラスがMessageContractAttributeでマークされ、もう1つがDataContractAttributでマークされる理由e? svcutilはどちらを使うのですか?コマンドは両方のサービスで同じですか?

+0

これは、あるサービスがDataContractを使用している可能性があり、他のサービスがmessageContractを使用している可能性があるからです。両方のサービスの契約定義を公開できますか? –

+0

@PankajKapare申し訳ありません申し訳ありませんが定義を公開することはできません。私はその2つのサービスを所有しておらず、nda許可のためにできません。あなたが何を言っているのか理解しています.2番目のインスタンスにDataContractAttributeを使用させる方法がありますか? – Iztoksson

+0

'/ serializer:DataContractSerializer'を試してみることができますが、svcutilはデフォルトでDataContractsを生成しようとするので、結果が変わるのではないかと疑います。 - 質問は、なぜあなたも気にしていますか? (もしあなたが醜いコードを心配しているのであれば、生成されたコードはほとんどいつも醜いですが、その上に薄いラッパーレイヤーを使って隠すのです;) – nodots

答えて

1

DataContract形式supports only a subset of XML Schema Definition。したがって、サービスメタデータによって異なります。svcutil(実際にはSystem.ServiceModel.Description.WsdlImportersvcutilによって使用されます)は、デフォルトでDataContractsを生成しようとします。 DataContractとして表現できないスキーマが検出された場合は、フォールバックとしてMessageContractを生成します。

+0

私はこれが理由だと思いますが、私はサービスを所有していないのでこれを確認することはできませんが、第2のものはもっと複雑に見えます。これは私の質問に答えるので、あなたの答えに感謝します。 – Iztoksson

関連する問題