Silverlight不向WCF服务发送字节数组

时间:2014-01-15 09:29:14

标签: c# asp.net wcf silverlight

我在Silverlight应用程序中有网络摄像头。我捕获图像并将其转换为字节数组并发送到WCF服务。这是图像捕获代码:

        MessageBox.Show("about to capture");
        cs.CaptureImageAsync();

cs是相机源并且配置正确(与imagecapturecompleted事件一样)。在图像捕获完成时,此代码执行:

        MessageBox.Show("Image Caputred");

        var img = e.Result.ToImage();
        var encoder = new PngEncoder();

        Stream stream = img.ToStreamByExtension("png");

        byte[] file = null;

        if (stream.Length > 512000)
        {
            img = ExtendedImage.Resize(img, 240, new NearestNeighborResizer());
            stream = img.ToStreamByExtension("png");
        }

        if (stream.Length < 512000)
        {
            BinaryReader binary = new BinaryReader(stream);
            file = binary.ReadBytes((int)stream.Length);
            MessageBox.Show("Stream read into file with length: " + file.Length);
        }
        else
        {
            MessageBox.Show("file size too large");
        }

        MessageBox.Show("Process done");

        cs.Stop();

        label1.Content = "and answer is : " + file!= null ? file.Length.ToString() : "ERROR";

        ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
        ServiceReference1.ITEM i = new ServiceReference1.ITEM { Image = file };
        obj.DoWorkCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(obj_DoWorkCompleted);
        obj.DoWorkAsync(i);

这是我在配置服务的asp.net项目中的web.config:

  <system.serviceModel>
<services>
  <service name ="AttendanceSystem.IService1" behaviorConfiguration="BasicHttpBinding_IService1">
    <endpoint address="" binding="basicHttpBinding" contract="AttendanceSystem.IService1"/>
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="BasicHttpBinding_IService1">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>

以下是silverlight应用程序中对服务的引用

<configuration>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647"
                maxReceivedMessageSize="2147483647">
                <security mode="None" />

            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:48886/Service1.svc" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
            name="default" />
    </client>
</system.serviceModel>

Fiddler在调用我的.svc服务文件时返回以下消息:

HTTP/1.1 400 Bad Request
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 15 Jan 2014 09:17:26 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Length: 0
Connection: Close

那是怎么回事?

更新:当我传递一个较小的字节数组时,服务似乎没有错误(例如BitConverter.GetBytes(123),但是当图像被发送时显然在最大限制范围内时失败)

1 个答案:

答案 0 :(得分:0)

尝试配置绑定服务器端(maxReceivedMessageSizereader quotas

<bindings>
  <basicHttpBinding>
    <binding maxReceivedMessageSize="2147483647">
      <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
    </binding>
  </basicHttpBinding>
</bindings>