¿Cómo puedo crear un WebService en C# que le aceptar Archivo y, a continuación, volver un Archivo al mismo tiempo en una llamada (Sincrónico).
Lo que estoy tratando de hacer es crear un WebService que aceptará y documento de MS Office, convertir el documento a PDF y, a continuación, volver a ese archivo de nuevo a la persona que llama (en mi caso estoy usando Java para el cliente)

  • Usted podría crear un Servicio Wcf convertir el archivo en bytes, enviarlo como matriz de bytes y hacer el tipo de retorno también una matriz de bytes. Usted probablemente tendrá que aumentar el tiempo de envío ya que por defecto es de 1 minuto. Normalmente, se podía utilizar una corriente, pero me acordé de que tenga algún inconveniente en los parámetros.
  • Como Silvermind dice. Usted puede buscar WCF y el verbo POST. El procesamiento de PDF es una empresa del lado de servidor único. Su WCF método necesita devolver un objeto al cliente. No está seguro de cómo HttpResponse.Flujo de aplicar a un WCF método? O bien, acabo de volver de una cadena de dirección url donde un procesado archivo pdf se crea (o almacenada), que redirige al cliente.
InformationsquelleAutor Maksim | 2012-03-28

4 Comentarios

  1. 2

    Como silvermind dijo en su comentario, la mejor opción es aceptar y devolver un array de bytes en su webservice.

    Puede cargar un archivo como un objeto bytearray con un método como este:

    public byte[] FileToByteArray(string _FileName)
    {
        byte[] _Buffer = null;
    
        try
        {
            System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream);
            long _TotalBytes = new System.IO.FileInfo(_FileName).Length;
            _Buffer = _BinaryReader.ReadBytes((Int32)_TotalBytes);
            _FileStream.Close();
            _FileStream.Dispose();
            _BinaryReader.Close();
        }
        catch (Exception _Exception)
        {
            Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
        }
        return _Buffer;
    }

    Además, si se ha implementado el servicio web como un servicio WCF, usted puede necesitar ajustar algunas opciones de configuración para aumentar la cantidad de información que puede enviar y el tiempo de espera. Este es el ejemplo de la configuración de enlace que permiten que. (Sólo un ejemplo, puede no coincidir con sus necesidades)

     <binding name="WebServiceBinding" closeTimeout="00:02:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:02:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                    realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
  2. 0

    puede codificar pequeñas cantidades de datos binarios en una cadena base64.

  3. 0

    aquí hay un par de tutoriales de diferentes fuentes de las que también depende de lo que usted está utilizando wcf o asmx. Yo también creo que tienes que crear dos funciones separadas y otra función que se llame a enviar y revivir de forma simultánea, aunque es posible que desee tener algo de tiempo para enviar a tener lugar antes de que usted pueda recibir.

    http://support.microsoft.com/kb/318425

    http://www.zdnetasia.com/create-a-simple-file-transfer-web-service-with-net-39251815.htm

    https://stackoverflow.com/questions/4530045/how-to-transfer-file-through-web-service

    • Neverever ASMX para uso público o de uso profesional,
    • por qué no han utilizado en un tiempo??
    • Es una tecnología antigua y WCF dará una gran cantidad de herramientas para cumplir con la moderna tecnología de la web/seguridad. Hay toneladas de publicaciones y estudios en la red con respecto a este. El bueno deja de asmx es que los servicios son la vergüenza de fácil instalación.
    • Estoy totalmente de acuerdo, pero a veces la gente se limita a un marco específico.
    • Esa es una de las razones. Asmx fuerza toda la parte de MS tipo. WCF, SOAP puede hablar con otro tipo de sistemas. Si no estoy equivocado, wcf era un addon .net 2, builtin desde 3.0? Lo siento por mis errores, estoy en el móvil.
  4. 0

    La forma más fácil es integrar a los básicos de bcn de la ASP.net MVC3 marco básico de Webproject y, a continuación, escribir un simple Controlador MVC con un único método que devuelve un objeto de tipo FileResult.

    Scott Hanselman ha publicado un gran post en el blog sobre cómo hacerlo en minutos:
    http://www.hanselman.com/blog/IntegratingASPNETMVC3IntoExistingUpgradedASPNET4WebFormsApplications.aspx

    Funciona perfectamente bien y se hace en menos de 3 minutos (después de MVC3 marco de la integración). Ya hay un stackoverflow post sobre el regreso de el archivo en MVC:
    Cómo crear un archivo y enviarlo por FileResult en ASP.NET MVC?

    Saludos,

Dejar respuesta

Please enter your comment!
Please enter your name here