Один сервис WCF - два клиента; Один клиент не работает
У меня есть одна служба WCF и два клиента консольного приложения.
Сервис: Сервисный код создается из контакта wsdl с помощью инструмента WCSF Blue.
Клиент 1: Этот клиент использует wsdl, полученный при просмотре файла SVC. Этот просматриваемый файл wsdl немного отличается от файла контракта wsdl.
Клиент 2: Этот клиент создан с использованием исходного контракта wsdl.
Cleint1 работает нормально. Клиент 2 не работает. Какие все могут быть потенциальные проблемы?
Файл App.Config обоих клиентов выглядит одинаково - только имя меняется. Я думаю, проблема будет в сгенерированном коде клиента C # - скорее всего вдействие - ReplyAction, Что нужно исправить здесь?
Одно заметное отличие заключается в Action и ReplyAction
Клиент 1:
Действие =»Урна: Lijo: демос: multiplyservice: расчет: v1 / ICalculationService / GetMultiplied», ReplyAction = "urn: lijo: demos: multiplyservice: расчет: v1 / ICalculationService / GetMultipliedRe "+"sponse»
Клиент 2:
Действие =»Урна: Lijo: демос: multiplyservice: расчет: v1: getMultipliedIn», ReplyAction = "*"
Сообщение трассировки
Сообщение с действиемУрна: Lijo: демос: multiplyservice: расчет: v1: getMultipliedIn» не может быть обработано в получателе из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть связано либо с несоответствием контракта (несоответствующие действия между отправителем и получателем), либо с несоответствием привязки / безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют одинаковый контракт и одну и ту же привязку (включая требования безопасности, например, Сообщение, Транспорт, Нет).
РЕДАКТИРОВАТЬ
Это можно исправить, изменив Action и ReplyAction, как показано ниже (Скопировано из Сервиса).
[System.ServiceModel.OperationContractAttribute(Action = "urn:lijo:demos:multiplyservice:calculation:v1/ICalculationService/getMultiplied", ReplyAction = "urn:lijo:demos:multiplyservice:calculation:v1/ICalculationService/getMultipliedRe" +
"sponse")]
Примечание. Важно убедиться, что регистр в службе корректен (т. Е. GetMultiplied не GetMultiplied).
Копирование из службы не является хорошим вариантом, хотя он работает. Какими будут правильные Action и ReplyAction?
Кроме того, не могли бы вы указать, какизмените wsdl так, чтобы ответное действие было правильным в сгенерированном клиентском прокси? Это важная часть, чтобы отметить это как ответ.
WCF: действия, звездочка и метаданные
WsdlExporter, который используется для публикации метаданных, игнорирует операции с действиями звездочки (как Action, так и ReplyAction).
Указание звездочки в сервисе указывает WCF не добавлять ответное действие к сообщению, что полезно, если вы программируете сообщения напрямую.
РЕКОМЕНДАЦИИ:
WCF метаданные, пропущенные операцииRestaurantData.xsd
Оригинальный контракт wsdl