2012-06-08 3 views
1

У меня есть два проекта в одном решении, сервис и приложение для потребителей. В службе у меня есть много классов, которые могут быть созданы при помощи приложения-потребителя, но некоторые классы недоступны. Нет разницы, кроме имени. Все классы являются общедоступными, поэтому все они должны быть видны. Есть ли проблемы с буферизацией или что-то еще, что может привести к тому, что проблема будет вести себя так?Невозможно получить доступ к классам через WCF

ответ

3

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

Необходимо использовать библиотеку классов и перемещать туда свои общие классы (и развертывать dll с помощью службы и потребителя), если обе стороны используют их.

Update (спасибо razlebe):
Бизнес-логика не должна использоваться совместно библиотек DLL. Он должен быть размещен сервером. Но имеет смысл разделить поддерживающие классы (например, класс, который форматирует данные), чтобы избежать дублирования кода.

+1

Истина - хотя обязательно подумайте о своем дизайне и подумайте над тем, какая функциональность лучше всего открыта через интерфейс веб-сервиса, а также путем совместного использования общего кода в DLL. – razlebe

2

Я предполагаю, что классы, которые «недоступны», были созданы после последнего поколения прокси (классы службы, на стороне клиента). Проверьте, помогает ли обновлять прокси.

+0

Извините, что вы имеете в виду «Возрождение»? – MiscellaneousUser

+0

Вы можете попытаться удалить свою службу Reference полностью, а затем добавить ее снова. – gdube

2

При обновлении класса обслуживания и смены интерфейса с помощью:

  • Добавление метода (Ваш случай)
  • Удаление метода
  • Изменение подписи

Ваш потребитель должен узнать о изменение. У вас должно быть ссылка на службу поддержки (http://msdn.microsoft.com/en-us/library/bb628652.aspx) для восстановления прокси.

Как его обновить?

Проверьте здесь, чтобы посмотреть, как: http://msdn.microsoft.com/en-us/library/bb628652.aspx) Но один образ лучше, чем тысяча слов:

Visual image of updating a service reference

+0

Я сделал это, обновил сервис службы справки, но ничего хорошего. Это не позволяет мне получить доступ к определенным, а не ко всем классам. – MiscellaneousUser

+0

В справочной службе обратитесь к файлу Reference.cs (вам нужно открыть дополнительные свойства или перейти в проводник Windows). Это класс с прокси-кодом. Проверьте, есть ли у вас новые методы. –

+0

Нет, там нет класса ResponseBusinessInterruptionCover, есть класс ResponsePremises, который имеет ту же подпись, что и та, которую я не вижу. Оба являются общедоступными, оба имеют стандартный конструктор и индивидуальную конструкцию. – MiscellaneousUser

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