WCF - 传递参数
WCF - passing parameters
我有 WCF 服务方法,它接受一个 int 参数和 returns 基于该参数的结果集。我正在使用 linq 和 entity framework 来检索记录。查询相同 table 与另一个 field.This 字段的新要求是一个 varchar 字段,并将字符串参数作为输入。那么实现这个的最佳方法是什么。是扩展相同的服务方法以合并新参数更好,还是我制作一个单独的服务方法更好。另一点需要注意的是,我不知道客户端在任何给定时间点会传递哪个参数。以下为现有服务方式逻辑
public IEnumerable<TBI.JV.Business.Objects.Asset> GetAssetsBasicBySedols(int[] sedols)
{
var priceDate = DateTime.UtcNow.Date.AddMonths(-8);
var typeList = new string[]
{
"UNIT TRUST",
"OEIC",
"INVESTMENT TRUST",
"INVESTMENT COMPANY",
"PENSION FUND",
"INSURANCE BOND",
"LISTED EQUITY",
"PREFERENCE SHARE",
"ZERO DIVIDEND PREF",
"GILT (CONVENTIONAL)",
"GILT (INDEX LINKED)",
"AIM",
"VCT",
"OFFSHORE FUND",
"ETP"
};
using (var dealingContext = new dbDealingContainer())
{
return (from fundprice in dealingContext.FundPrices
where (fundprice.FUND_STATUS == "ACTIVE" || fundprice.FUND_STATUS == "SUSPENDED") &&
(fundprice.INVNAME != null || fundprice.INVNAME != "") &&
!fundprice.INVNAME.StartsWith("IFSL Bestinvest") &&
fundprice.WaterlooTradable == true &&
//fundprice.PRICE_DATE > priceDate &&
fundprice.BID_MID_PRICE > 0 && typeList.Contains(fundprice.FUND_TYPE)
&& ((sedols.Count() > 0 && sedols.Contains(fundprice.Id)) || sedols.Count() == 0)
select new TBI.JV.Business.Objects.Asset
{
AssetName = fundprice.INVNAME,
AssetId = fundprice.Id,
AssetType = fundprice.FUND_TYPE,
Epic = fundprice.INVESTMENT_CODENAME,
StarRating = fundprice.STARLEN,
Sedol = fundprice.SEDOL_NUMBER
}).ToList();
}
}
简而言之,您需要使用这个新参数添加一个服务方法。
在S服务O面向A的架构中,修改(并因此删除)是添加对客户透明时被视为重大更改。
当您更改服务端时,您必须问问自己,使用您的应用程序的实际客户会发生什么情况。如果答案是"they will have to update their clients",这通常不是一件好事。
从另一个角度来看,新功能意味着新概念,不应改变现有概念。
此外,即使您打算替换现有功能,也不应一步完成。您应该考虑优势兼容性:发布具有新修改功能的服务,将旧功能标记为过时,通知您的客户并稍后发布最终版本的服务。
这背后的整个概念称为SOA Governance。
我有 WCF 服务方法,它接受一个 int 参数和 returns 基于该参数的结果集。我正在使用 linq 和 entity framework 来检索记录。查询相同 table 与另一个 field.This 字段的新要求是一个 varchar 字段,并将字符串参数作为输入。那么实现这个的最佳方法是什么。是扩展相同的服务方法以合并新参数更好,还是我制作一个单独的服务方法更好。另一点需要注意的是,我不知道客户端在任何给定时间点会传递哪个参数。以下为现有服务方式逻辑
public IEnumerable<TBI.JV.Business.Objects.Asset> GetAssetsBasicBySedols(int[] sedols)
{
var priceDate = DateTime.UtcNow.Date.AddMonths(-8);
var typeList = new string[]
{
"UNIT TRUST",
"OEIC",
"INVESTMENT TRUST",
"INVESTMENT COMPANY",
"PENSION FUND",
"INSURANCE BOND",
"LISTED EQUITY",
"PREFERENCE SHARE",
"ZERO DIVIDEND PREF",
"GILT (CONVENTIONAL)",
"GILT (INDEX LINKED)",
"AIM",
"VCT",
"OFFSHORE FUND",
"ETP"
};
using (var dealingContext = new dbDealingContainer())
{
return (from fundprice in dealingContext.FundPrices
where (fundprice.FUND_STATUS == "ACTIVE" || fundprice.FUND_STATUS == "SUSPENDED") &&
(fundprice.INVNAME != null || fundprice.INVNAME != "") &&
!fundprice.INVNAME.StartsWith("IFSL Bestinvest") &&
fundprice.WaterlooTradable == true &&
//fundprice.PRICE_DATE > priceDate &&
fundprice.BID_MID_PRICE > 0 && typeList.Contains(fundprice.FUND_TYPE)
&& ((sedols.Count() > 0 && sedols.Contains(fundprice.Id)) || sedols.Count() == 0)
select new TBI.JV.Business.Objects.Asset
{
AssetName = fundprice.INVNAME,
AssetId = fundprice.Id,
AssetType = fundprice.FUND_TYPE,
Epic = fundprice.INVESTMENT_CODENAME,
StarRating = fundprice.STARLEN,
Sedol = fundprice.SEDOL_NUMBER
}).ToList();
}
}
简而言之,您需要使用这个新参数添加一个服务方法。
在S服务O面向A的架构中,修改(并因此删除)是添加对客户透明时被视为重大更改。
当您更改服务端时,您必须问问自己,使用您的应用程序的实际客户会发生什么情况。如果答案是"they will have to update their clients",这通常不是一件好事。
从另一个角度来看,新功能意味着新概念,不应改变现有概念。
此外,即使您打算替换现有功能,也不应一步完成。您应该考虑优势兼容性:发布具有新修改功能的服务,将旧功能标记为过时,通知您的客户并稍后发布最终版本的服务。
这背后的整个概念称为SOA Governance。