c# - referencia - ¿Cómo acceder al servicio WCF RIA desde el servicio de Windows?
los metadatos contienen una referencia que no se puede resolver (4)
Tengo una aplicación Silverlight 4 que funciona (VS2010, SL4, WCF RIA, alojada en mi caja de desarrollo usando Cassini, Windows 7 de 64 bits). Dentro del directorio ClientBin tengo un archivo .svc que describe mi servicio:
<% @ServiceHost Service="MyApp.Services.MyService
Factory="System.ServiceModel.DomainServices.Hosting.DomainServiceHostFactory" %>
Cuando navego a http: // localhost: 52878 / ClientBin / MyApp-Services-MyService.svc veo lo siguiente:
Usted ha creado un servicio. Para probar este servicio, deberá crear un cliente y usarlo para llamar al servicio. Puede hacerlo utilizando la herramienta svcutil.exe desde la línea de comandos con la siguiente sintaxis: svcutil.exe http: // localhost: 52878 / ClientBin / MyApp-Services-MyService.svc? Wsdl
Quiero acceder a ese servicio desde una aplicación de servicio de Windows. Tengo entendido que necesito habilitar puntos finales SOAP para que esto suceda. Entonces, agrego lo siguiente a mi archivo 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>
En primer lugar, Intellisense se queja de la presencia de la etiqueta y dice:
El elemento system.ServiceModel tiene un elemento secundario no válido domainServices.
En segundo lugar, la aplicación Silverlight antes mencionada deja de funcionar, presumiblemente porque este cambio rompe los servicios web subyacentes.
En tercer lugar, parece que el ensamblado System.ServiceModel.DomainServices.Hosting no contiene realmente el tipo SoapXmlEndpointFactory; si trato de buscar el servicio después de agregar lo anterior a web.config, veo:
No se pudo cargar el tipo ''System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory'' del ensamblado ''System.ServiceModel.DomainServices.Hosting, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35''.
Si inspecciono el ensamblaje con Reflector, veo que contiene los tipos DomainServiceEndpointFactory y PoxBinaryEndpointFactory, pero no SoapXmlEndpointFactory.
¿Podría alguien decirme por favor cómo debería estar haciendo esto? No puedo creer que sea tan difícil simplemente consumir un servicio WCF RIA en otra cosa que no sea una aplicación de Silverlight.
¿Has intentado simplemente ejecutar
svcutil.exe http: // localhost: 52878 / ClientBin / MyApp-Services-MyService.svc? wsdl
Alternativamente, ¿ha instalado el kit de herramientas de RIA Services? http://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&displaylang=en
Es necesario para los puntos finales SOAP y JSON
En lugar de ...
System.ServiceModel.DomainServices.Hosting
usa el ensamble ...
Microsoft.ServiceModel.DomainServices.Hosting
del kit de herramientas de WCF RIA Services. Contiene el tipo SoapXmlEndpointFactory
.
La ubicación predeterminada es ... %Program Files%/Microsoft SDKs/RIA Services/v1.0/Toolkit/Libraries/Server
La clase SoapXmlEndpointFactory
es parte del
Microsoft.ServiceModel.DomainServices.Hosting
ensamblado, que está incluido en Silverlight Toolkit.
Mira aquí
<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>
Declare esto en ConfigSections. Es importante incluir el sectionGroup correctamente