我可以在同一服务中进行两次具有相同名称(但不同的签名)的操作吗?
示例:
[ServiceContract]
public interface IMyService {
[OperationContract]
bool MyOperation(string target);
[OperationContract]
bool MyOperation(List<string> targets); }
我真的需要支持不同的签名,因为我有几个团队正在使用我的服务,只有一个团队需要第二个签名(我不希望团队的其他成员必须更改他们的代码)。
有什么想法吗?
答案 0 :(得分:1)
不,你真的不能对合同有相同的命名操作,但是你可以在两个合同之间分开它们:
[ServiceContract]
public interface IMyService
{
[OperationContract]
bool MyOperation(string target);
}
[ServiceContract]
public interface IMyServiceV2
{
[OperationContract]
bool MyOperation(List<string> targets);
}
[ServiceContract]
public class MyService : IMyService, IMyServiceV2
{
public bool MyOperation(string target)
{
/* your code*/
return true;
}
public bool MyOperation(List<string> targets)
{
/* your code*/
return true;
}
}
并公开两个端点:
<services>
<service name="YourNamespace.MyService ">
<endpoint
address="http://localhost:8000/v1"
binding="webHttpBinding"
contract="YourNamespace.IMyService" />
<endpoint
address="http://localhost:8000/v2"
binding="webHttpBinding"
contract="YourNamespace.IMyServiceV2" />
</service>
</services>
或者您可以为OperationContract设置Name参数,但对于SOA服务,它将与重命名函数名称具有相同的结果。