2009-08-11 4 views
2

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

Я хотел, чтобы классы, которые делают сообщение WCF, выходят в отдельный проект. Таким образом, я:

  • Создал новый проект; Библиотека классов Silverlight
  • Перемещено классы из моего приложения Silverlight в мою библиотеку классов Silverlight
  • Удалена ссылка службы в приложении, поскольку я больше не вызываю ее из приложения.
  • Добавлена ​​ссылка на службу из проекта библиотеки классов.

Теперь - сборка в порядке, и я получаю intellisense для сервисов в библиотеке классов, поэтому кажется, что все в порядке. Я также обновил сервис и получил обновления в библиотеке классов. Но при запуске приложения он терпит неудачу при выполнении вызова службы дает следующее сообщение об ошибке:

InvalidOperationException был необработанное кодом пользователя

Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт «MyServiceReference.IMyService» в раздел конфигурации клиента ServiceModel. Возможно, это связано с тем, что файл конфигурации не найден для вашего приложения или потому, что элемент-конечный элемент, соответствующий этому контракту, не найден в клиентском элементе.

Похоже, что он не может найти услугу, но почему? Я предполагаю, что не должно быть проблем с ссылками на службы из библиотеки классов Silverlight, так как это позволяет мне добавить один?

ответ

2

Невозможно найти конфигурацию службы - где у вас есть конфигурация для службы WCF? По умолчанию клиентское приложение (EXE) будет иметь app.config, который содержит конечные точки службы для подключения.

Также библиотеки классов (DLL) по умолчанию не имеют собственной конфигурации, но полагаются на их приложение для хостинга, чтобы обеспечить их конфигурацию.

Итак, у вас наверняка отсутствует конфиг для конечной точки клиента. Скорее всего, он был создан как app.config в проекте библиотеки классов, но это не используется, на самом деле - вам нужно будет переместить раздел <system.serviceModel> в конфигурацию основного приложения (я не уверен в Silverlight, но вы будете знать, куда его поставить).

Marc

+0

Thx - это решило его! Решено путем копирования содержимого ServiceReferences.ClientConfig из проекта библиотеки классов или добавления той же ссылки службы в проект приложения. Итак, я полагаю, что это приложение само обрабатывает запрос на обслуживание, даже если оно определено в другом месте? Но это кажется немного взломанным. Можно ли использовать ссылки на службы в проектах Class Library? – stiank81

+1

О, конечно же, почти желательно иметь ссылки на службы в библиотеке классов, я бы сказал. Просто не забудьте поместить их конфиг в основное приложение - вот и все :-) –

+0

Хорошо :-) Thx для ответа! – stiank81

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