Principales respuestas
Problemas ExcelServices en PageApliction

Pregunta
-
Hola
Estoy tratando de generar un archivo Excel a traves de programación utilizando VB.Net en un Page Application.
lo primero que estoy haciendo es utilizar un ejemplo extraido del libro SharePoint 2013 de Principio a fin para probar que funcione sin problemas y lo pude hacer como indica el libro en una aplicación de consola. adjunto el codigo
Imports ExcelServicesTest.ExcelServiceReference Module Module1 Sub Main() obtenerDatos() End Sub Sub obtenerDatos() Dim urlLibro As String = "http://[server]/sites/SCIC/ExcelLibrary/TestDocument.xlsx" Dim nombreHoja As String = "Sheet1" Dim cliente As ExcelServiceSoapClient = New ExcelServiceSoapClient() Dim SessionId As String = String.Empty Try Dim status() As Status 'abrir el libro SessionId = cliente.openworkbook(urlLibro, String.Empty, String.Empty, status) 'Leer Celda Dim ores1 As Object = cliente.GetCell(SessionId, nombreHoja, 1, 0, True, status) Dim ores2 As Object = cliente.GetCell(SessionId, nombreHoja, 1, 2, True, status) Console.Write("valor de la col 1:" & ores1 & " mas el valor del la col2:" & ores2 & " es:" & CInt(ores1) + CInt(ores2)) status = cliente.SetCell(SessionId, "Sheet1", 1, 3, CInt(ores1) + CInt(ores2)) Dim ores3 As Object = cliente.GetCell(SessionId, nombreHoja, 1, 3, True, status) Console.Write("valor de la col 3:" & ores3) Catch ex As System.ServiceModel.FaultException Console.Write(ex.Message & "-----" & ex.Code.SubCode.Name) Catch ex As Exception Console.Write(ex.Message) Finally cliente.CloseWorkbook(SessionId) End Try Console.ReadKey() End Sub End Module
y adjunto el app.config de la aplicación
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="ExcelServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="65536" maxBufferSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm=""/> <message clientCredentialType="UserName" algorithmSuite="Default"/> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://[server]/sites/SCIC/_vti_bin/excelservice.asmx" binding="basicHttpBinding" bindingConfiguration="ExcelServiceSoap" contract="ExcelServiceReference.ExcelServiceSoap" name="ExcelServiceSoap" /> </client> <behaviors> <endpointBehaviors> <behavior name="AllowImpersonationBehavior"> <clientCredentials> <windows allowedImpersonationLevel="Impersonation"/> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> </system.serviceModel> </configuration>
Con esto el Ejemplo Funciona bien, pude leer datos e incluso insertar datos en el libro.
el tema es que si esto mismo lo quiero replicar en un page application, ya no funciona desde el punto en donde instancio el ExcelServiceSoapClient().
ademas esperaba que el objeto cliente me entregue mas propiedades o atributos como definir las credenciales, la url del servicio y solo me entrega los web method del servicio .
alguna idea de como lo puedo hacer y si pudieran entregar ejemplos precisos por favor, es urgente.
desde ya muchas gracias
para probar el código debe tener creado un archivo excel con datos en una biblioteca.
Respuestas
-
Hola Masterkapell,
Tranqui no te preocupes aqui estamos para aprender y transmitir lo que sepamos nosotros :-).
Te intento explicar un poco como hacerlo, cuando nosotros desde un WebPart añadimos una referencia a un servicio web internamente lo que hace es crear un app.config. Eso si lo ejectas debugueando la APP funciona correctamente debido a que cuando depuras encuentra la configuración ya que estas ejecutandolo desde Visual Studio. Tu aplicación la que consume el WebService no debes de realizar ninguna modificación, lo que tienes que hacer es en el Server añadir la configuración para poder conectarse con el servicio. Tienes que hacer lo siguiente: Te vas al directorio donde esta la aplicación web de SharePoint c:\inetput\wss\virtual directory\"nombre de tu aplicación" y una vez alli lo primero que debes de hacer es hacerte una copia del web.config. Una vez has echo la copia, abres el web.config y añades el contenido de tu app.config. justo donde toque es decir tu fichero de configuracion app añades lo que pone en el Sistem.ServiceModel justo donde lo pone en tu webConfig (sin reemplazar nada de lo que exista). Una vez modificado el webconfig prueba tu aplicación y ya te debe de funcionar :-)
Un saludo,
MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81
- Propuesto como respuesta Juan Carlos GonzálezMVP sábado, 8 de junio de 2013 7:55
- Marcado como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:15
-
Hola,
Mira estas teniendo un problema con el tipo de autenticación, mira estos post en los que te indica como solucionarlo:
http://blogs.msdn.com/b/publicsector/archive/2005/10/19/482833.aspx
Ya nos cuentas como te fue,
Saludos,
MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81
- Propuesto como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:15
- Marcado como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:15
-
Hola ADrian Despues de Casi una Semana intentando e intentando, logre hacer que funcione esto.
te cuento
al metodo ClientCredentials ya le habia seteado credenciales pero no en el lugar correcto, si no que lo estaba haciendo en el HttpDigest y ahí no funcionaba, el asunto que a las perdidas utilice los métodos que brinda ClientCredentials y utilice el método Windows y ahí me funciono el tema.
cliente.ClientCredentials.Windows.ClientCredential.Domain = "domain"
cliente.ClientCredentials.Windows.ClientCredential.Password = "pass"
cliente.ClientCredentials.Windows.ClientCredential.UserName = "user"La verdad Adrian muchas gracias por orientarme y la Asesoría, de hecho te segui hasta en twiter para molestarte con este tema(pero no te moleste por twiter).
Desde Chile mandamos saludos y agradecimientos Totales y ojala que a algun perdido como yo le sirva el tema.
Gracias Totales.
- Propuesto como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:14
- Marcado como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:14
Todas las respuestas
-
Hola,
Si estas teniendo problema desde que invocas al ExcelServiceSoapClient, es debido a que no encuentra la configuración del ExcelService y eso supongo que es debido a que el contenido que tienes en el App.config no lo has añadido en el web.config. Una vez lo añades ya te debe de funcionar sin problemas.
Un saludo,
MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81
-
-
Hola Masterkapell,
Tranqui no te preocupes aqui estamos para aprender y transmitir lo que sepamos nosotros :-).
Te intento explicar un poco como hacerlo, cuando nosotros desde un WebPart añadimos una referencia a un servicio web internamente lo que hace es crear un app.config. Eso si lo ejectas debugueando la APP funciona correctamente debido a que cuando depuras encuentra la configuración ya que estas ejecutandolo desde Visual Studio. Tu aplicación la que consume el WebService no debes de realizar ninguna modificación, lo que tienes que hacer es en el Server añadir la configuración para poder conectarse con el servicio. Tienes que hacer lo siguiente: Te vas al directorio donde esta la aplicación web de SharePoint c:\inetput\wss\virtual directory\"nombre de tu aplicación" y una vez alli lo primero que debes de hacer es hacerte una copia del web.config. Una vez has echo la copia, abres el web.config y añades el contenido de tu app.config. justo donde toque es decir tu fichero de configuracion app añades lo que pone en el Sistem.ServiceModel justo donde lo pone en tu webConfig (sin reemplazar nada de lo que exista). Una vez modificado el webconfig prueba tu aplicación y ya te debe de funcionar :-)
Un saludo,
MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81
- Propuesto como respuesta Juan Carlos GonzálezMVP sábado, 8 de junio de 2013 7:55
- Marcado como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:15
-
Hola Adrian
Muchas gracias por auxiliarme en este tema,
Ok agregue la Referencia Como me Dijiste en el archivo web.config, esta de la misma formar que lo indico en el primer comentario, pero tengo este mensaje de error capturado en el try catch
en el servidor la configuración global del servicio es esta.
disculpa lo novato, pero tengo que resolver este tema con urgencia.
desde ya muchas gracias.
-
-
Hola,
Mira estas teniendo un problema con el tipo de autenticación, mira estos post en los que te indica como solucionarlo:
http://blogs.msdn.com/b/publicsector/archive/2005/10/19/482833.aspx
Ya nos cuentas como te fue,
Saludos,
MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81
- Propuesto como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:15
- Marcado como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:15
-
Hola Adrian, implemente o que decian los blog y nada.
Anduve conversando con un amigo y me menciono algo de implementar Kerberos si la instalación de SharePoint estaba en granjas diferentes, pero no es asi, la instalación de SharePoint se realizo toda en el mismo Servidor.
y no he encontrado ningun ejemplo de implementacion de Excel Services en SP2013 por la web. esto esta realmente jodido.
-
Hola,
No tienes que implementar nada de Kerberos ni nada por el estilo, lo que te esta pidiendo es que el servicio requiere autentificación. Para ello lo que puedes hacer es en el webpart le pases las credenciales a traves del metodo ClientCredentials que tiene el servicio. Las credenciales no hacen falta que las pongas fijas las puedes coger del contexto.
Saludos,
Adrián,
P.D En los links que te pase te indicaba por si has puesto algo mal en el webconfig,
MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81
-
Hola ADrian Despues de Casi una Semana intentando e intentando, logre hacer que funcione esto.
te cuento
al metodo ClientCredentials ya le habia seteado credenciales pero no en el lugar correcto, si no que lo estaba haciendo en el HttpDigest y ahí no funcionaba, el asunto que a las perdidas utilice los métodos que brinda ClientCredentials y utilice el método Windows y ahí me funciono el tema.
cliente.ClientCredentials.Windows.ClientCredential.Domain = "domain"
cliente.ClientCredentials.Windows.ClientCredential.Password = "pass"
cliente.ClientCredentials.Windows.ClientCredential.UserName = "user"La verdad Adrian muchas gracias por orientarme y la Asesoría, de hecho te segui hasta en twiter para molestarte con este tema(pero no te moleste por twiter).
Desde Chile mandamos saludos y agradecimientos Totales y ojala que a algun perdido como yo le sirva el tema.
Gracias Totales.
- Propuesto como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:14
- Marcado como respuesta Santiago Porras RodríguezMVP, Moderator viernes, 14 de junio de 2013 22:14
-