15

svcutil a la で定義済みの wsdl を使用しています。

svcutil some_service.wsdl

生成されたメソッドの 1 つには、次の署名があります。

[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]
SubmitDataResponse SubmitData( SubmitDataRequest request )

VS2010/.net35 の scvutil は上記のみを生成し、VS はサービスの起動に問題はありませんが、VS2012/.net45 の一部である svcutil プログラムも署名付きのメソッドを生成します

[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]
Task<SubmitDataResponse> SubmitDataAsync( SubmitDataRequest request );

これにより、実行時例外が発生します。

System.InvalidOperationException: 同じコントラクトに同じ名前の 2 つの操作を含めることはできません。タイプ MyType のメソッド SubmitDataAsync と SubmitData は、この規則に違反しています。メソッド名を変更するか、OperationContractAttribute の Name プロパティを使用して、いずれかの操作の名前を変更できます。

非同期に追加されたメソッドを削除するか、VS2010 から svcutil を使用するだけで、これを回避できます。しかし、なぜ svcutil が実行時例外を引き起こすインターフェースを生成するのか (これはバグなのでしょうか?)、それを機能させるために何か追加する必要があるのか​​どうか疑問に思っています。

4

1 に答える 1

21

デフォルトの動作が変更されたようです。/syncOnlyパラメーターを指定すると、古い動作が保持されます。

 /syncOnly                          - Generate only synchronous method
                                  signature. Default: generate synchronous
                                  and task-based asynchronous method
                                  signatures.
于 2012-11-26T09:03:17.890 に答える