views:

202

answers:

1

Hi,

I have problem with streaming. When I send small file like 1kb txt everything is ok, but when I send larger file like 100 kb jpg or 2gb psd I get:

The remote server returned an unexpected response: (400) Bad Request.

I'm using windows 7, VS 2010 and .net 3.5 and WCF Service library

I lost all my weekend on this and I still see this error :/ Please help me

Client:

 var client = new WpfApplication1.ServiceReference1.Service1Client("WSHttpBinding_IService1");

        client.GetString("test");
        string filename = @"d:\test.jpg";
        FileStream fs = new FileStream(filename, FileMode.Open);
        try
        {
            client.ProcessStreamFromClient(fs);
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception);
        }

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="StreamedHttp" closeTimeout="10:01:00" openTimeout="10:01:00"
          receiveTimeout="10:10:00" sendTimeout="10:01:00" allowCookies="false"
          bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="65536000" maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed"
          useDefaultWebProxy="true">

          <readerQuotas maxDepth="0" maxStringContentLength="0" maxArrayLength="0"
          maxBytesPerRead="0" maxNameTableCharCount="0" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary2/Service1/"
        binding="basicHttpBinding" bindingConfiguration="StreamedHttp"
        contract="ServiceReference1.IService1" name="WSHttpBinding_IService1" />
    </client>
  </system.serviceModel>
</configuration>

And Wcf ServiceLibrary:

 public void ProcessStreamFromClient(Stream str)
        {

//error occuring even this method is empty
            using (var outStream = new FileStream(@"e:\test.jpg", FileMode.Create))
            {
                var buffer = new byte[4096];
                int count;
                while ((count = str.Read(buffer, 0, buffer.Length)) > 0)
                {
                    outStream.Write(buffer, 0, count);
                }
            }
        }

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="Binding1"
                 hostNameComparisonMode="StrongWildcard"


                 maxBufferSize="65536000"

                 transferMode="Streamed"

                 bypassProxyOnLocal="false"

                 closeTimeout="10:01:00"

openTimeout="10:01:00" receiveTimeout="10:10:00" sendTimeout="10:01:00"

maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <security mode="None" />
        </binding>
      </basicHttpBinding>

    </bindings>
    <client />
    <services>
      <service name="WcfServiceLibrary2.Service1">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary2/Service1/"   />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address=""  binding="basicHttpBinding" contract="WcfServiceLibrary2.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->

          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>
+2  A: 

Try setting:

<serviceDebug includeExceptionDetailInFaults="true" /> 

It will not solve the problem, but you may get an error message stating what the problem is.

Shiraz Bhaiji
@Shiraz Bhaiji here is the error: public void ProcessStreamFromClient(System.IO.Stream stream) { base.Channel.ProcessStreamFromClient(stream); AND If my webmethod is empty still get error . Do you have any idea
Try sending a small file and check if it still works, then try gradually increase the size of the file to findout where the limit is.
Shiraz Bhaiji