this や this のような投稿を見てきましたが、それぞれ数年前のものです。
このようなことはできますか?
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division = null);
できません。メソッドシグネチャに関してWCFには多くの制限があります。一部の制限はホストメカニズムによるものであり、他の制限はWSDL/MEXによるものです。
WCFを使用すると、サービスコードやオーバーロードされたメソッドなどの多くの既定のパラメーターを使用できる可能性があるという事実にもかかわらず、サービスをホストすると、サービスが開始する場合と開始しない場合、または開始しても機能しない場合があります。トリッキーです。
これを克服するために私が行ったのは、必要に応じてnull許容パラメーターを使用することです。そのため、クライアントコードでは、自動生成されたクライアントプロキシにアクセスするサービスレイヤーが常にあります。私のサービス層には、必要なすべてのオーバーロードとオプションのパラメーターがあります。例(ダーティコード):
WCFサービス:
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division, int? subDivision, bool? isActive);
クライアントサービスレイヤー(自動生成されたプロキシではなく、私が作成したプロキシ)
public List<InventoryPart> GetParts(string partialPartNumber){
return GetParts(partialPartNumber, null);
}
public List<InventoryPart> GetParts(string partialPartNumber, string division){
return GetParts(partialPartNumber, division, null);
}
public List<InventoryPart> GetParts(string partialPartNumber, string division, int? subDivision){
return GetParts(partialPartNumber, division, subDivision, null);
}
public List<InventoryPart> GetParts(string partialPartNumber, string division, int? subDivision, bool? isActive){
// This method is the one that actually calls the client proxy channels and all.
}
クライアントアプリはクライアントサービスレイヤーを使用します
public void LoadPartNumbers(){
var parts = ClientServiceLayer.GetParts(this.txtPartNumber.Text, null, (int) this.cboDivisions.SelectedItem );
}