Как правильно настроить службу WCF с поддержкой Silverlight? - PullRequest
3 голосов
/ 27 января 2009

РЕДАКТИРОВАТЬ : я начал закрытое голосование по этому вопросу, потому что я решил проблему. У меня все было хорошо, но ссылка на перезаписывающее устройство ASP, которую я скачал и удалил некоторое время назад, все еще имела ссылку в IIS. Это сообщение на форуме Waclaw Stypula (тот, что с шагами) помогло мне отследить это, случайно. Когда я запустил команду запуска, IIS сказал мне, что он (очевидно) не может найти библиотеку DLL переписывающего устройства. Я удалил ссылку, и после этого приложение заработало нормально.


Я следую silverlight.net учебникам Джесси Либерти . В настоящее время я пытаюсь выполнить учебное пособие 3 , но я врезаюсь в стену под заголовком " CREATE THE WEB SERVICE " (примерно на полпути вниз).

Во-первых, когда я создаю новый сервис, добавляя его в решение, в учебном пособии указывается, что необходимо создать три файла; IService1.vb, Service1.svc и Service1.svc.vb. Я не получаю файл IService1.vb при добавлении службы в решение. Я загрузил копию проекта, который они предоставили, и файл Service1.svc.vb там, поэтому я добавил один вручную и скопировал содержимое файла. В учебнике говорится, что это учебник VB, но отображает C # на прилагаемом скриншоте, так что, возможно, в этом проблема.

После того, как я собрал все файлы, подобные учебным пособиям (скопируйте / вставьте, чтобы убедиться, что у меня нет опечатки), я пытаюсь добавить ссылку на службу и получаю следующую ошибку:

The service class of type KeyboardControl_Web.Service1 both defines a ServiceContract and inherits a ServiceContract from type KeyboardControl_Web.IService1. Contract inheritance can only be used among interface types. If a class is marked with ServiceContractAttribute, it must be the only type in the hierarchy with ServiceContractAttribute. Consider moving the ServiceContractAttribute on type KeyboardControl_Web.IService1 to a separate interface that type KeyboardControl_Web.IService1 implements.

Я пытался найти разные части сообщения, но не нашел много полезной информации.

Вот код для различных файлов:

//IService1.vb
Imports System.ServiceModel

' NOTE: If you change the class name "IService1" here, you must also update
'       the reference to "IService1" in Web.config.
<ServiceContract()> _
Public Interface IService1

    <OperationContract()> _
   Function GetAllLocations() As List(Of Address)

End Interface

//Service1.svc.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.Text

' NOTE: If you change the class name "Service1" here, you must also
'       update the reference to "Service1" in Web.config and in the
'       associated .svc file.

Public Class Service1
    Implements IService1
    Public Function GetAllLocations() As List(Of Address) Implements IService1.GetAllLocations
        Dim db As New DataClasses1DataContext()
        Dim matchingCustomers = From cust In db.userControlDemos Select cust
        'Return matchingCustomers.ToList()
    End Function
End Class

Я новичок в Silverlight / WCF в целом, а также в интерфейсах и сервисах. Ребята, можете ли вы помочь мне встать на правильный путь?

РЕДАКТИРОВАТЬ: я должен добавить, что я использую Visual Studio 2008, в Windows Vista Business SP1.

1 Ответ

1 голос
/ 27 января 2009

если у вас установлен Silverlight Tools для Visual Studio, вместо использования шаблона WCF по умолчанию, рассмотрите возможность использования «службы WCF с поддержкой Silverlight», которая упростит вам задачу и создаст все необходимые настройки. Этот новый шаблон был введен в бета-версии 2 и до сих пор существует (ref: http://timheuer.com/blog/archive/2008/06/06/changes-to-accessing-services-in-silverlight-2-beta-2.aspx).

...