2011-01-17 2 views
0

У меня есть службы WCF, написанных два проектов:WsHttpBinding переведены на основной

  1. WCF служба библиотека
  2. WCF веб-приложение

Первый проект имеет сервис вызов IMyService реализованный MyService. Он настроен с использованием привязки WS, и если я нажимаю F5 в этом проекте, WCFTestClient отображает привязку WS. В веб-приложение, которое я есть SVC-файл с этой разметке с тем же именем

<%@ ServiceHost Language="C#" Debug="true" Service="[Namespace].MyService" %> 

Если я нажимаю F5 на этом проекте оказывает BasicHttpBinding. То же самое в клиенте. Почему?

ответ

2

Я только что проверил, что проект библиотеки WCF по умолчанию создает app.config с WSHttpBinding, используемым для службы по умолчанию. Когда вы запускаете WCFTestClient, он всегда использует эту локальную конфигурацию. Если вы хотите использовать WCFTestClient для тестирования дополнительных сервисов, вы должны добавить их конфигурацию в эту конфигурацию. Эта конфигурация никогда не используется ни для чего другого.

Приложение WCF Service использует web.config. В WCF 4.0 используется упрощенная конфигурация, которая добавляет конечные точки на основе определенных предопределенных условий. По умолчанию он добавляет конечную точку BasicHttpBinding ко всем службам, открытым через HTTP, общим ServiceHostFactory.

+1

Благодарим вас за полезный ответ. Можете ли вы рассказать мне, как я могу заставить веб-проект распространять услугу с использованием конечной точки WS? Если я попытаюсь это сделать, он все равно укажет на основной адрес, и я получаю ошибку SOAM mistmatch (1.1 вместо 1.2) – Raffaeu

0

Как сконфигурирован ваш конфигурационный файл? Если вы настраиваете конечную точку для использования wshttpbinding, это тот, который следует использовать.

Не могли бы вы добавить код здесь (включая данные привязки и конечной точки из файла конфигурации), чтобы мы могли взглянуть?

Thanks, Roberto Lopes.

+0

Если вы хотите получить более подробную информацию, воспользуйтесь комментариями. –

0

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

В первую очередь, какую версию Visual Studio вы используете? Поскольку ничего не сказано, я предполагаю, что это последняя версия VS2010 с пакетом обновления 1 (SP1).

Предположим, у вас есть визуальное студийное решение, имеющее два проекта, одно из которых - это библиотека услуг WCF, другая - приложение WCF, созданное с использованием шаблона проекта по умолчанию без ручной настройки.

  • Служба библиотеки WCF будет иметь app.config файл со следующей строкой:

в кратко-, Visual Studio 2010 (SP1) использует WsHttpBinding для проектов службы WCF библиотеки по умолчанию.

  • Проект приложения службы WCF, однако, будет иметь файл web.config, который не содержит явного определения конечной точки, и в этом случае используемая по умолчанию привязка конечной точки является basicHttpBinding.

ОП сказал: «Когда я нажал F5 на этот проект ...», это очень вводящее в заблуждение утверждение. Что значит «нажать F5 на проекте»?Вы имеете в виду, что вы выбрали узел проекта в дереве решений, а затем нажали F5? Если это так, то всегда будет зависеть от того, какой проект задан как проект запуска в решении (а не на том, какой узел проекта выбран в Visual Studio UI).

Если проект приложения WCF Service Application является проектом запуска, нажатие F5 НЕ приведет к запуску клиента тестирования WCF, вместо этого оно приведет к отображению папки проекта в IE.

Если проект библиотеки WCF является начальным проектом, будет запущен тестовый клиент WCF, и это происходит только потому, что в разделе свойств отладки окна свойств проекта параметры запуска по умолчанию имеют следующие значения: /client:"WcfTestClient.exe "

Смежные вопросы