BBa*_*r42 19 c# wcf optional-parameters
我可以这样做吗?
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division = null);
Run Code Online (Sandbox Code Playgroud)
Dan*_*dra 34
你不能.关于方法签名,WCF有许多限制; 一些限制是因为主机机制,而其他因为WSDL/MEX.
尽管WCF可能会让您在服务代码和重载方法以及许多其他方面拥有默认参数,但是当您托管服务时,它可能启动或不启动,或者它可能启动但可能或不启动.这很棘手.
我为克服这个问题所做的是,我在需要的地方使用可空参数,然后在我的客户端代码上,我总是有一个访问我自动生成的客户端代理的服务层; 我的服务层有我想要的所有重载和可选参数.示例(脏代码):
WCF服务:
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division, int? subDivision, bool? isActive);
Run Code Online (Sandbox Code Playgroud)
客户端服务层(不是自动生成的代理,而是由我编写的代理)
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.
}
Run Code Online (Sandbox Code Playgroud)
我的客户端应用程序使用客户端服务层
public void LoadPartNumbers(){
var parts = ClientServiceLayer.GetParts(this.txtPartNumber.Text, null, (int) this.cboDivisions.SelectedItem );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26631 次 |
| 最近记录: |