你可以发送1个Web服务相同的参数但名称不同吗?

时间:2013-08-21 14:36:20

标签: c# web-services

我们正在创建一个Web服务来接收值(字符串)。根据字符串,我们确定它是“类型1”还是“类型2”,以及在处理方面需要做什么。 所以我的Web服务设置为使用以下方式接收数据: http://www.mysite.com/service.asmx?op=ProcessData?DataID=string

发送字符串的客户端希望使用2个不同的请求发送它: http://www.mysite.com/service.asmx?op=ProcessData?DataIDType1=string http://www.mysite.com/service.asmx?op=ProcessData?DataIDType2=string

我可以知道他发送的是哪种类型吗?我不能为此设置不同的签名吗?因为它们都是相同的参数?

2 个答案:

答案 0 :(得分:0)

这类似于写作:

public void DoSomething(String inputA)
{
    ...
}

public void DoSomething(String inputB)
{
    ...
}

它不起作用(并且有充分的理由!) - 方法签名是相同的。

想象一下这个电话:

MyClass.DoSomething("TEST");

它会叫哪个? 应该调用哪个?

您的选择(如我所见):

public void DoThingA(String input)
{
    ...
}

public void DoThingB(String input)
{
    ...
}

这将为您提供不同的方法签名,并表示您正在进行两个不同的操作(后来更干净,IMO)。

如果您坚持使用单一方法签名,则可以执行以下操作:

public void DoSomething(String input, object operationType) //where object is whatever type you see fit...
{
    if(operationType == ...)
    {
        DoThingA(input);
    }
    else
    {
        DoThingB(input);
    } 
}

或者...

public void DoSomething(String input)
{
    switch(input)
    {
        case "A":
            ...
            break;
        case "B":
            ...
            break;
        default:
            ...
            break;
    }
}

最合适取决于您的可用选项。但我会创建两种方法。

答案 1 :(得分:0)

方法应该只有一个责任,因此我建议使用两种方法。

public void FirstMethod(string param)
{
// Do something.
}

public void SecondMethod(string param)
{
// Do something.
}

这代表了良好的设计,并且当客户想要添加更多功能时,后来的可维护性令人头疼,对您来说无疑更容易!