将图像保存为varbinary(第3部分)

本文关键字:3部 varbinary 图像 保存 | 更新日期: 2023-09-27 18:16:03

这又是一个问题,我有保存图像在silverlight到我的数据库,我以为我有它所有的工作,直到我尝试了不同的图像…

我用下面的方法保存图像到我的数据库。我首先将图像转换为byte的数组,然后将其发送到我的服务。

 private void btnUpload_Click(object sender, RoutedEventArgs e)
        {
            //nieuwe instantie van de klasse "Afbeelding", om later door te sturen naar service
            Afbeelding a = new Afbeelding();
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "JPEG files|*.jpg";
            if (openFileDialog.ShowDialog() == true)
            {
                //Afbeelding ophalen via open dialoog
                Stream stream = (Stream)openFileDialog.File.OpenRead();
                string fileName = openFileDialog.File.Name;
                //Converteren naar bytes
                //byte[] bytes = BinaryConverter.convertToByte(stream);
                byte[] bytes = new byte[stream.Length];
                stream.Read(bytes, 0, (int)stream.Length);
                //aan de instantie de Binary waarde van de afbeelding meegeven om naar de database te sturen
                a.id = 1;
                a.source = new Binary { Bytes = bytes };
            }
            EditAfbeeldingServiceClient client = new EditAfbeeldingServiceClient();
            client.UpdateAfbeeldingCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_UpdateAfbeeldingCompleted);
            client.UpdateAfbeeldingAsync(a);
        }

在我的服务中,我这样做:

    [OperationContract]
    public void UpdateAfbeelding(Afbeelding a)
    {
        var query = (from p in dc.Afbeeldings 
                     where p.id == a.id
                     select p).SingleOrDefault();
        query.source = a.source;
        dc.SubmitChanges();
    }

现在在我的测试中,这一切都工作了,但我只使用一个图像来测试…因此,当我刚才尝试使用不同的图像时,我得到以下错误:

System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (400) Bad Request. In Silverlight, a 404 response code may be reported even when the service sends a different error code. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
   at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
   at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
   --- End of inner exception stack trace ---
   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
   at OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingServiceClient.EditAfbeeldingServiceClientChannel.EndUpdateAfbeelding(IAsyncResult result)
   at OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingServiceClient.OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingService.EndUpdateAfbeelding(IAsyncResult result)
   at OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingServiceClient.OnEndUpdateAfbeelding(IAsyncResult result)
   at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)

我无法从这个错误中读取任何内容,所以我再次被困在这里。我很抱歉这么频繁地使用这些板子,但如果不是这么需要的话,我真的不会这么做的。

我已经设置了最大的发送到一个高的号码,但它仍然不工作。

<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />

你可以找到我的网站。此处配置:http://pastebin.com/whMs5h1w

谢谢你的帮助,我真的很感激。托马斯。

编辑:我设法得到一个更可读的错误与启用跟踪,希望这有助于任何人:)

将图像保存为varbinary(第3部分)

WCF有各种内置限制。一个是maxReceivedMessageSize,默认是65536字节,另一个是maxArrayLength(不确定默认是什么)。很有可能你已经超过了其中一个(或两个)。您可以在您的服务配置中更改它们。这篇关于MSDN的文章包含一些配置示例。

还可以为您的服务启用跟踪,以便您更深入地了解哪些限制已达到。

Btw:有一个File.ReadAllBytes方法。

编辑:显然有一个叫做Fiddler的工具可以帮助跟踪这些问题