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 が実行時例外を引き起こすインターフェースを生成するのか (これはバグなのでしょうか?)、それを機能させるために何か追加する必要があるのかどうか疑問に思っています。