2010-05-09 20 views
7

Ho un'applicazione Silverlight 4 funzionante (VS2010, SL4, WCF RIA, ospitata nella mia casella di sviluppo utilizzando Cassini, 64-bit Windows 7). All'interno della directory ClientBin Ho un file .svc che descrive il mio servizio:Come accedere al servizio RIA WCF dal servizio Windows?

<% @ServiceHost Service="MyApp.Services.MyService 
Factory="System.ServiceModel.DomainServices.Hosting.DomainServiceHostFactory" %> 

Quando si naviga a http://localhost:52878/ClientBin/MyApp-Services-MyService.svc compaiono i seguenti:

È stato creato un servizio. Per testare questo servizio, è necessario creare un client e utilizzarlo per chiamare il servizio . È possibile farlo utilizzando lo strumento Svcutil.exe dalla riga di comando con la seguente sintassi: svcutil.exe http://localhost:52878/ClientBin/MyApp-Services-MyService.svc?wsdl

voglio accedere a tale servizio da un'applicazione di servizio Windows. La mia comprensione è che ho bisogno di abilitare gli end-point SOAP per far sì che ciò accada. Così, aggiungo il seguente al mio file web.config:

<domainServices> 
    <endpoints> 
    <add name="soap" 
     type="System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, 
     System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, 
     Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </endpoints> 
</domainServices> 

In primo luogo, Intellisense lamenta la presenza del tag, dicendo:

L'elemento System.ServiceModel ha non validi domainServices elemento figlio .

In secondo luogo, la suddetta applicazione Silverlight smette di funzionare, presumibilmente perché questa modifica interrompe i servizi Web sottostanti.

In terzo luogo, sembra che l'assembly System.ServiceModel.DomainServices.Hosting non contenga effettivamente il tipo SoapXmlEndpointFactory; se cerco di individuare il servizio dopo l'aggiunta di quanto sopra per web.config vedo:

Impossibile caricare il tipo 'System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory' da assemblea 'System.ServiceModel. DomainServices.Hosting, Versione = 4.0.0.0, Cultura = neutra, PublicKeyToken = 31bf3856ad364e35 '.

Se ispezionare l'assembly utilizzando Reflector, vedo che contiene la DomainServiceEndpointFactory e tipi PoxBinaryEndpointFactory, ma non SoapXmlEndpointFactory.

Qualcuno potrebbe farmi sapere come dovrei farlo? Non posso credere che dovrebbe essere così difficile semplicemente consumare un servizio RIA WCF in qualcosa di diverso da un'applicazione Silverlight!

+0

Alcuni suggerimenti dal forum SL (http://forums.silverlight.net/forums/p/180880/409333.aspx) includono l'impostazione Copia locale su true su System.ServiceModel.DomainServices . Assemblare l'assembly (non funziona in quanto il problema è che manca il tipo specificato da quell'assembly) e assicurarsi che .NET Framework 4.0 sia installato (lo è). –

risposta

2

Hai provato semplicemente eseguendo

svcutil.exe http://localhost:52878/ClientBin/MyApp-Services-MyService.svc?wsdl

In alternativa, avete installato il toolkit RIA Services? http://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&displaylang=en

E 'richiesto per SOAP e JSON endpoint

+0

Ho installato RIA Services Toolkit (da http://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&displaylang=en), modificato la dichiarazione domainServices per utilizzare lo spazio dei nomi corretto e assemblaggio, e ora funziona. Grazie! –

1

La classe SoapXmlEndpointFactory fa parte del

Microsoft.ServiceModel.DomainServices.Hosting

montaggio, che è incluso nel Silverlight Toolkit.

Vedi here

4

Invece di ...

System.ServiceModel.DomainServices.Hosting

utilizzare l'assembly ...

Microsoft.ServiceModel. DomainServices.Hosting

dal toolkit Servizi RIA WCF. Contiene il tipo SoapXmlEndpointFactory.

La posizione predefinita è ... %Program Files%\Microsoft SDKs\RIA Services\v1.0\Toolkit\Libraries\Server

+0

Grazie! Mi ci è voluto un po 'per vedere la differenza tra le due DLL. –

1
<sectionGroup name="system.serviceModel"> 
    <section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication" requirePermission="false" /> 
</sectionGroup> 

dichiararlo nelle configSections. È importante includere correttamente il sectionGroup