Операционный контракт с другим источником или URL действия - PullRequest
0 голосов
/ 18 апреля 2011

Наш сторонний API предоставляет два разных веб-сервиса, но имеют идентичные методы и модели. Тем не менее они различаются только по URI (Путь веб-службы, Путь действия [Операционный контракт].

Итак, я решил:

  1. Генерация кода из их wsdl с использованием VS.

  2. Отредактируйте пространство имен, чтобы оно использовалось так же, чтобы оно было "Общим", и не используйте вместо него ссылку на службу. Я использую отредактированный код Reference.cs.

  3. Создайте новый прокси-сервер, который будет обрабатывать правильный URI службы для использования (обернут в нее файл Reference.cs).

Теперь у меня проблема с "Method1", потому что у них разные имена действий. Исключение составляют:

"Сервер не распознал значение Заголовок HTTP SOAPAction: http://www.api.com/service/Method1"

Я просто заметил, что это правильное имя действия: http://www.api.com/service1/Method1

Теперь возникает вопрос, есть ли какая-либо конфигурация или поведение, которое я могу использовать для исправления имени действия для каждого метода для каждой службы?

Или, пока они продолжают добавлять контракты для каждой реализации API, я должен также продолжать добавлять контракты для каждого и просто использовать ChannelFactory для этого?

Пожалуйста, помогите, спасибо.

1 Ответ

1 голос
/ 18 апреля 2011

Я в конечном итоге напрямую использовал ChannelFactory, когда столкнулся с той же проблемой

В моей реализации у меня был базовый интерфейс, который имел все общие методы для двух API.Затем у меня было 2 отдельных интерфейса - по одному для каждой версии API сторонней организации - который наследует от базового интерфейса и добавляет методы и [OperationContract] атрибуты, которые различались между двумя реализациями.

При создании экземпляра ChannelFactory<> Iиспользовал один из дочерних интерфейсов.Помогли сохранить потребительский код чистым и поддерживаемым

...