我的WCF Web服务中有OperationContract。
[OperationContract]
[WebGet(UriTemplate = "/publisheddata/{number}/{*publication}")]
Message GetPublished(String number, String publication);
[OperationContract]
[WebGet(UriTemplate = "/unpublisheddata/{number}/{*publication}")]
Message GetUnPublished(String number, String publication);
我想调用一个常见的方法,以上两个OperationContract,意味着在Service实现代码中我会调用基于UriTemplate调用的存储过程,我知道我可以通过在上面的url中添加额外的属性来轻松完成,我不知道我想要求用户将其从网址中删除。
这里我想在调用UriTemplate的基础上编写条件,所以上面的代码变成如下:
[OperationContract]
[WebGet(UriTemplate = "/publisheddata/{number}/{*publication}")]
Message GetData(String number, String publication);
[OperationContract]
[WebGet(UriTemplate = "/unpublisheddata/{number}/{*publication}")]
Message GetData(String number, String publication);
在我的服务实现中,我想检查如果未发布数据,那么GetUnPublished else如果发布了数据,那么GetPublisheddata
是否有可能或建议更好的方法来实施它?
答案 0 :(得分:1)
首先, - 可能 - 因为您的方法名称,您将获得异常。您不能使用与您相同的方法名称,但可以使用OperationContract属性“Name”
[OperationContract(Name="GetPublished")]
Message GetData(String number, String publication);
[OperationContract(Name="GetUnPublished")]
Message GetData(String number, String publication);
如果您更喜欢单一方法,可以像这样修改方法
[OperationContract]
[WebGet(UriTemplate = "/{publicationType}/{number}/{*publication}")]
Message GetData(string publicationType, string number, string publication);
并在您的方法中检查“publicationType”参数并执行逻辑
答案 1 :(得分:0)
如果我真的明白,你只想提供访问单一方法。我在我的项目中使用了这样的结构
[WebInvoke(Method="POST", UriTemplate ="/customers", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), Description("Save a customer information")]
OperationResult CustomerSave(Request<Customer> customerRequest);
我还有2种不同的方法 - 不在WCF接口/合同中显示 - 命名为“创建”和“更新”
在我的wcf方法(CustomerSave)中,我正在做这样的过程
if(customerRequest.Id != Guid.Empty)
{
Update(customerRequest);
}
else
{
Create(customerRequest);
}
我的用户无法看到创建/更新方法