这里主要说的是同名异常:
[ServiceContract] public interface IUserInfo { [OperationContract] string ShowName(string name); [OperationContract] string ShowName(); }
对于以上同名的 OperationContract 如果在客户端引用服务时,将报异常如下:
解决方法:
[ServiceContract] public interface IUserInfo { [OperationContract] string ShowName(string name);
//设置别名 [OperationContract(Name="ShowNameDefault")] string ShowName(); }
这样客户端引用不报异常,但ShowName的重载,将不起作用,详细引用如下:
如果需要同名使用ShowName,则需要自定义,而不使用自动生成的:
class UserInfoServiceClient : ClientBase<IUserInfo>, IUserInfo { public string ShowName() { return this.Channel.ShowNameDefault(); } public string ShowName(string name) { return this.Channel.ShowName(name); } #region IUserInfo 不实现操作 public Task<string> ShowNameAsync(string name) { throw new NotImplementedException(); } public string ShowNameDefault() { throw new NotImplementedException(); } public Task<string> ShowNameDefaultAsync() { throw new NotImplementedException(); } #endregion }
static void Main(string[] args) { UserInfoServiceClient client = new UserInfoServiceClient(); Console.WriteLine(client.ShowName()); Console.ReadKey(); }