Не может быть операция с тем же именем? - PullRequest
0 голосов
/ 15 февраля 2019

Я сгенерировал интерфейс веб-сервиса WCF из WSDL с SVCutil.Затем я создал файл service.svc, в котором я выполняю интерфейс следующим образом:

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

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

При просмотре этой службы я получаю следующее исключение:

Невозможно выполнить две операции втот же контракт с тем же именем, методы GetEquipmentAsync и GetEquipment в типе wsEquipmentSoap нарушают это правило.Вы можете изменить имя одной из операций, изменив имя метода или используя свойство Name для OperationContractAttribute.

Что, однако, не имеет того же имени?один называется GetEquipment, а другой - GetEquipmentAsync.

Однако я вижу, что svcutil сгенерировал ту же строку действия в интерфейсе:

[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);

Я не хочу менять интерфейс, но я меняюДействие и добавление Async в конце метода Async. Вместо этого я получаю следующее исключение:

Синхронный метод OperationContract 'GetEquipment' в типе 'wsEquipmentSoap' сопоставляется с основанным на задаче асинхронным методом OperationContract 'GetEquipmentAsync ', поскольку они имеют одно и то же имя операции' GetEquipment '.Когда синхронный метод OperationContract сопоставляется с основанным на задаче асинхронным методом OperationContract, два OperationContracts должны иметь одинаковое значение для свойства 'Action'.В этом случае значения разные.Чтобы исправить это, измените свойство Action одного из OperationContracts, чтобы оно соответствовало другому.Кроме того, изменение имени одного из методов предотвратит сопоставление.

Даже с объяснением я до сих пор не понимаю, почему выбрасываются эти исключения?Интерфейс сгенерирован с помощью svcutil, и изменение в интерфейсе не кажется правильным?

...