2009-05-22 18 views
2

私は、再処理したいWCFサービスのOperationContractとしてメソッドを公開しています。 WCFはdoesntの中にName属性を指定せずにオーバーロードされたメソッドを可能にするのでメソッドを拡張するためのWCF命名規則

public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation) 

:私はもっとこのようなものである方法を持っていると思い

public ReportResultObject GetReport(string stringContainingParameters) 

:以前、プログラマは次のように書いていましたOperationContract、および私は現在のクライアントを壊したくない、このような状況の命名規則はありますか? GetReportV2やGetReportHeyUseMeInsteadのようなもの?

+0

契約属性の名前の問題点は何ですか? –

+0

実際には何もありません。私は、WSDLから外れているのか、ちょうどChannelFactoryメソッドを使用しているのかにかかわらず、古いクライアントでのみ使用されていたメソッドと区別できるように、プログラマーのための方法があることを望んでいました。新しいクライアントで使用されます。 –

答えて

1

私は感覚的なものを持っていますので、人々がそれを認識して適切に使用する可能性が高くなります。

public ReportResultObject GetReportWithAdditionalInformation(...) 

でも多すぎるかもしれません。

私は確かにGetReportV2などを避けます。

0

WCFサービスがRESTfulである場合、bool includeAdditionalInformationが合格するかどうかは関係ありませんか?

+0

いくつかのインスタンスではRESTを使用しますが、他のすべてのプロトコル(tcp、ipc、およびws HTTP)も同様に使用されます。 –

6

もう一度同じことをすると、別のパラメータを追加する必要があるときに、同じ「混乱」を起こすことになります。データ契約である1つのパラメータを持つことを強くお勧めします。

public ReportResultObject GetReportTheSuperDooperWay(
    GetReportParameters parameters) 

これはあなたに何を与えるのでしょうか?ウェル

[DataContract] 
public class GetReportParameters 
{ 
[DataMember(IsRequired=false)] 
public string parameters; 

[DataMember(IsRequired=false)] 
public int[] someIds; 

[DataMember(IsRequired=false)] 
bool includeAdditionalInformation 
} 

各フィールドはオプションなので、既存のクライアントを破損することなく新しいフィールドを追加できます。 IExtensibleDataObjectも実装したいので、servicedataの契約レベルの両方で名前空間を使ってバージョニングする必要があるので、これはやや単純な例です。

1

新しいoperationalcontractを作成し、名前空間を追加します。次に、新しい契約を使用しているクライアントに名前空間の方法で呼び出させます。これはバージョン管理をシミュレートします。