基于WSDL的操作不支持重载,但是可以手动的实现操作重载,WCF定义了一个机制OperationContract,使用OperationContract特性的Name属性,为操作指定别名:
[AttributeUsage(AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
{
  
public string Name
   {
get;set;}

  
//更多成员

}
需要同时为服务和客户端的操作指定别名,在服务端要为每个重载的操作提供唯一的标识名。例如:

[OperationContract(Name="A")]       

string GetData(int value);

[OperationContract(Name="B")]  

void GetData();

客户端代理生成的代码

public interface IService1 {

        [System.ServiceModel.

OperationContractAttribute(Action="http://192.168.1.105:8003/IService1/A", ReplyAction=http://192.168.1.105:8003/IService1/AResponse)]       

string A(int value);

        [System.ServiceModel.

OperationContractAttribute(Action="http://192.168.1.105:8003/IService1/B", ReplyAction=http://192.168.1.105:8003/IService1/BResponse)]

void B();

}

public partial class Service1Client : System.ServiceModel.ClientBase<ConsoleApplication1.ServiceReference1.IService1>, ConsoleApplication1.ServiceReference1.IService1 {

public Service1Client() {

        }

public Service1Client(string endpointConfigurationName) :

base(endpointConfigurationName) {

        }

public Service1Client(string endpointConfigurationName, string remoteAddress) :                

base(endpointConfigurationName, remoteAddress) {


        }         

public string A(int value) {           

return base.Channel.A(value);

        }

public void B() {

base.Channel.B();

        }}

需要手动修改

 

public interface IService1 {

 [System.ServiceModel.

OperationContractAttribute(Name="A",Action="http://192.168.1.105:8003/IService1/A", ReplyAction=http://192.168.1.105:8003/IService1/AResponse)]

string GetData(int value);

  [System.ServiceModel.

OperationContractAttribute(Name="B", Action="http://192.168.1.105:8003/IService1/B", ReplyAction=http://192.168.1.105:8003/IService1/BResponse)]

void GetData();

    }   

public partial class Service1Client : System.ServiceModel.ClientBase<ConsoleApplication1.ServiceReference1.IService1>, ConsoleApplication1.ServiceReference1.IService1 {   

public string GetData(int value)

        {           

return base.Channel.GetData(value);

        }

       

public void GetData()

        {           

base.Channel.GetData();
        }

posted on 2012-01-31 16:58  软件小懒猫  阅读(290)  评论(0编辑  收藏  举报