Я создал прокси-класс для сторонней внешней веб-службы asmx с помощью svcutil.exe.
Локально на моей машине разработки все работает нормально, но при развертывании на сервере я получаю следующую ошибку:
Произошла ошибка связи со службой TBS: не удалось загрузить операцию ProcessNotificationAsync, поскольку она имеет параметр или возвращаемый тип типа System.ServiceModel.Channels.Message или тип, который имеет MessageContractAttribute и другие параметры разных типов. При использовании System.ServiceModel.Channels.Message или типов с MessageContractAttribute метод не должен использовать какие-либо другие типы параметров.
Теперь я понимаю причину этой ошибки, потому что, согласно MSDN:
Вы можете использовать класс Message как входной параметр операции, возвращаемое значение операции или и то, и другое. Если сообщение используется где-либо в операции, применяются следующие ограничения: • Операция не может иметь никаких параметров out или ref. • Не может быть более одного входного параметра. Если параметр присутствует, он должен быть либо сообщением, либо типом контракта сообщения. • Тип возврата должен быть либо недействительным, либо сообщением, либо типом контракта сообщения.
Когда я смотрю в сгенерированный файл кода, я вижу:
public System.Threading.Tasks.Task<ProcessNotificationResponse> ProcessNotificationAsync(int aNotificationID, string aComponentParam)
что, похоже, нарушает приведенные выше правила, потому что ProcessNotificationResponse - это MessageContractAttribute и другие примитивные типы параметров.
Почему это работает на одной машине, а не на другой? Я ожидал, что это приведет к ошибке на обеих машинах.