Bonjour à tous,

Je suis désespéré, j'ai une application des plus simples qui, après sélection d'une source vidéo, permet de capturer des screenshot de la webcam. J'appel un generic handler pour sauvegarder mon fichier à la racine de mon site dans un répertoire "captures". En local avec VS2010 aucun souci tout fonctionne à merveille.

Mais quand je publie mon site sur IIS, rien ne se passe et l'image capturée n'est pas enregistrée.(J'ai pensé à vérifier les droits sur le dossier).

Je suis en .Net 4.0 et voi mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
//Convert in jpeg data
                byte[] _data = WriteableBitmapToJpeg(e.Result);
 
                //Enregistrempent sur le disque
                WebClient wc = new WebClient();
                wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);
                Uri u = new Uri(Application.Current.Host.Source, "../SaveCapture.ashx?filename=" + name);
                MessageBox.Show("Uri : " + u.ToString());
                wc.OpenWriteAsync(u, null, _data); 
 
...
 
private void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                byte[] fileContent = e.UserState as byte[];
                Stream outputStream = e.Result;
                outputStream.Write(fileContent, 0, fileContent.Length);
                outputStream.Close();
            }
            else
            {
                MessageBox.Show("Erreur d'enregistrement de la photo");
            }
        }
Et le handler :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public void ProcessRequest(HttpContext context)
        {
            HttpRequest request = context.Request;
            HttpResponse response = context.Response;
            HttpServerUtility server = context.Server;
 
            string fileName = context.Request.Params["filename"];
            if (!string.IsNullOrEmpty(fileName))
            {
                using (Stream inputStream = request.InputStream)
                {
                    string folder = Path.GetFullPath(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Captures"));
 
                    //folder = server.MapPath("~") + "\\Captures";
 
                    if (!System.IO.Directory.Exists("Captures"))
                        System.IO.Directory.CreateDirectory(folder);
 
                    using (FileStream fs = new FileStream(folder + @"\" + fileName, FileMode.OpenOrCreate))
                    {
                        byte[] fileContent = new byte[inputStream.Length];
                        inputStream.Read(fileContent, 0, fileContent.Length);
                        fs.Write(fileContent, 0, fileContent.Length);
                        fs.Flush();
                    }
                }
                response.Clear();
                response.End();
            }
        }
J'ai une petite idée en me disant qu'il manque quelquechose dans mon web.config mais je ne trouve pas quoi (pour l'instant il n'y a rien de spécial).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<configuration>
    <connectionStrings>
        <add name="CaptureDatabaseConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CaptureDatabase.mdf;Integrated Security=True;User Instance=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
 
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="LargeBuffer">
                    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
</configuration>
Merci d'avance pour votre aide.
Silberfab