无法使用相同的名称进行操作吗?

时间:2019-02-15 15:55:55

标签: c# web-services wcf interface datacontract

我使用SVCutil从WSDL生成了WCF Web服务接口。然后,我创建了一个service.svc文件,在该文件中,Implmenet就是这样的界面:

    public class Service2 : wsEquipmentSoap
{
    public GetEquipmentResponse GetEquipment(GetEquipmentRequest request)
    {
        throw new NotImplementedException();
    }

    public Task<GetEquipmentResponse> GetEquipmentAsync(GetEquipmentRequest request)
    {
        throw new NotImplementedException();
    }
}

浏览此服务时,出现以下异常:

  

同一合约中不能有两个具有相同名称的操作,   wsEquipmentSoap类型的方法GetEquipmentAsync和GetEquipment   违反此规则。您可以通过以下方式更改其中一项操作的名称   更改方法名称或通过使用Name属性   OperationContractAttribute。

但是,Thay没有相同的名字吗?一个名为GetEquipment,另一个名为GetEquipmentAsync。

但是我可以看到svcutil在接口中产生了相同的Action字符串:

[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/GetEquipment", ReplyAction="*")]
GetEquipmentResponse GetEquipment(GetEquipmentRequest request);

[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/GetEquipment", ReplyAction="*")]
System.Threading.Tasks.Task<GetEquipmentResponse> GetEquipmentAsync(GetEquipmentRequest request);

我不想更改接口,但是我更改了Action并在Async方法的末尾添加了Async,我得到了这个异常:

  

类型中的同步OperationContract方法“ GetEquipment”   “ wsEquipmentSoap”与基于任务的异步匹配   OperationContract方法“ GetEquipmentAsync”,因为它们具有   相同的操作名称“ GetEquipment”。同步时   OperationContract方法与基于任务的异步匹配   OperationContract方法,两个OperationContracts必须具有   “ Action”属性的值相同。在这种情况下,值是   不同。要解决此问题,请更改其中一项的“操作”属性   OperationContract以匹配另一个。或者,更改   其中一种方法的名称将阻止匹配。

即使有了解释,我仍然不明白为什么抛出这些异常?接口是用svcutil生成的,在接口中更改感觉不对吗?

0 个答案:

没有答案