none
Problemas ExcelServices en PageApliction RRS feed

  • 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.

    viernes, 7 de junio de 2013 16:43

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

    sábado, 8 de junio de 2013 7:48
  • Hola,

    Mira estas teniendo un problema con el tipo de autenticación, mira estos post en los que te indica como solucionarlo:

    http://stackoverflow.com/questions/5758849/setting-up-ntlm-authentication-with-wcf-to-sharepoint-web-services

    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

    miércoles, 12 de junio de 2013 8: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.

    jueves, 13 de junio de 2013 22:07

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

    viernes, 7 de junio de 2013 20:09
  • Hola Adrián Gracias por responder, se que es un poco patudo de mi parte pero me podrías indicar como agrego el web reference al web config y como sería el llamado desde la aplicación??
    viernes, 7 de junio de 2013 20:19
  • 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

    sábado, 8 de junio de 2013 7:48
  • 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.

    martes, 11 de junio de 2013 21:29
  • Esto es informacion adicional

    la referencia del servicio la agregue de la siguiente manera

    ojala que todos los antecedentes que he proporcionado sirvan de algo

    Saludos

    martes, 11 de junio de 2013 21:30
  • Hola,

    Mira estas teniendo un problema con el tipo de autenticación, mira estos post en los que te indica como solucionarlo:

    http://stackoverflow.com/questions/5758849/setting-up-ntlm-authentication-with-wcf-to-sharepoint-web-services

    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

    miércoles, 12 de junio de 2013 8: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.

    miércoles, 12 de junio de 2013 20:58
  • 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

    jueves, 13 de junio de 2013 6:20
  • 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.

    jueves, 13 de junio de 2013 22:07
  • Me alegro que te funcionara, una cosa menos!! 

    Para eso estamos para intentar ayudar en la medida de lo que podamos :-)

    Saludos 


    MCPD SharePoint 2010 Mi blog: http://blogs.encamina.com/desarrollandosobresharepoint Twitter: @AdrianDiaz81

    viernes, 14 de junio de 2013 5:43