<分区>
我看过类似 this 的帖子和 this但他们每个人都只有几岁。
我可以做这样的事情吗?
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division = null);
<分区>
我看过类似 this 的帖子和 this但他们每个人都只有几岁。
我可以做这样的事情吗?
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division = null);
最佳答案
你不能。 WCF 在方法签名方面有很多限制;有些限制是因为主机机制,有些是因为 WSDL/MEX。
尽管 WCF 可能允许您在服务代码中使用默认参数和重载方法以及许多其他内容,但当您托管服务时,它可能会启动,也可能不会启动,或者它可以启动但可能会工作,也可能不会工作。这很棘手。
为了克服这个问题,我所做的是在需要的地方使用可为空的参数,然后在我的客户端代码上我总是有一个服务层可以访问我自动生成的客户端代理;我的服务层有我想要的所有重载和可选参数。示例(脏代码):
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 );
}
关于c# - 可以在 WCF 服务方法中使用可选参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963789/