Как я могу указать пространство имен контракта в конфигурации XML конечной точки WCF?
-
11-10-2019 - |
Вопрос
У меня есть этот контракт на обслуживание WCF (значительно упрощен, но обратите внимание на пространство имен, в котором он находится):
namespace Foo.Services.BarService
{
[ServiceContract]
interface BarContract {... }
}
В моем app.config
(Клиентская сторона), я настраиваю конечную точку для некоторой службы:
<endpoint address="..."
binding="..."
contract="Foo.Services.BarService.BarContract" />
Тем не менее, это приводит к ошибке, в которой говорится, что в конфигурации клиента не было обнаружено никакой конечной точки, которая поддерживает BarService.BarContract
. Анкет Я могу избавиться от этой ошибки, только изменив contract
Значение атрибута BarService.BarContract
(т.е. удалив пространство имен).
Почему это? Откуда могла эта ошибка? Почему я не должен упомянуть часть пространства имен в типе контракта? Разве это не должно быть еще больше в WCF не найти соответствующую конечную точку?
Ответьте на вопросы в комментарии @ladislav Mrnka ниже:
Я говорю о клиентской стороне. (Я забыл упомянуть этот бит; извините за это.) Может ли эта ошибка, возможно, со стороны сервера?
Я создал вышеуказанный контракт на обслуживание вместе с
BarClient
класс, который реализует это через Visual Studio Добавить ссылку на обслуживание средство. Я указал URLBarService
, который управляет кем -то другим. Вот где я также указал, что услуга должна быть помещена вFoo.Services.BarService
Пространство имен.Я собирался использовать сервис прямо через
BarClient
класс автоматически генерируется для меня, а не черезChannelFactory<BarContract>
.
Решение
Создание клиента по Добавить ссылку на обслуживание не воссоздает структуру пространства имен из обслуживания. Все созданные типы и контракты помещаются в новое пространство имен, определенное именем ссылки на службу. Так что, я думаю, вы назвали ссылку на услуги Barservice. Конфигурация клиента должна следовать именам сгенерированных контрактов.