4

I have a WCF web service called "Palladium" that is created as a project in a VS2008 solution.
I have an ASP.Net Web Application that hosts this service on a page called, "Palladium.svc".
When I post form data to the web service my service receives that data and can do stuff with it.

Now I'm posting images to the service and the post size exceeds WCF's default maxReceivedMessageSize property. To get around this, I've added a binding configuration to the end point on the ASP.Net Web Application's web.config file.

My problem is that the binding configuration doesn't appear to be applying.

The service is being posted to from an iPhone app, and when the post size is under 65k the service works fine. As soon as the post size exceeds this I get a 400 (Bad Request) error.
For testing purposes I created a test.aspx file in my ASP.Net Web Application which posts some forms values and an image to the web service. Again, when the post size is under the default 65k size the service works fine. Over 65k and I get served a 400 error.

The test page posts to a URL matching the following URITemplate /job-photo/{photoId}/{palladiumId}/{jobId}

If someone could help me debug this problem, it would be much appreciated.

Markup for Test Page:

        <html xmlns="http://www.w3.org/1999/xhtml" >
        <head runat="server">
            <title></title>
        </head>
        <body>
            <form id="form1" action="http://localhost/cds/resources/services/palladium.svc/job-photo/1/235DE168-5D1C-46A4-89F2-FD17C6B9F415/567" method="post" enctype="multipart/form-data">
            <div>
                <input type="text" name="user" value="joe bloggs" />

                <input type="file" name="photo" />
                <input type="submit" name="btnsubmit" value="submit" />
            </div>
            </form>
        </body>
        </html>

Service information from web.config:

     <system.serviceModel>
       <bindings>
         <wsHttpBinding>
           <binding name="large_message_binding" maxBufferPoolSize="5242880" maxReceivedMessageSize="5242880">
             <readerQuotas maxStringContentLength="5242880" maxArrayLength="5242880" maxBytesPerRead="5242880" />
           </binding>
         </wsHttpBinding>
       </bindings>

       <behaviors>
       <serviceBehaviors>
        <behavior name="CDS.UI.Resources.Services.PalladiumBehavior">
         <serviceMetadata httpGetEnabled="true" />
         <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
       </serviceBehaviors>
      </behaviors>

      <services>
       <service behaviorConfiguration="CDS.UI.Resources.Services.PalladiumBehavior"
        name="CDS.UI.Resources.Services.Palladium">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="large_message_binding" contract="CDS.PalladiumService.IPalladium">

         <identity>
          <dns value="localhost" />
         </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
       </service>
      </services>

     </system.serviceModel>

Markup from Palladium.svc

    <%@ ServiceHost Language="C#" Debug="true" Service="CDS.PalladiumService.Palladium" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Nick W
  • 117
  • 3
  • 10

1 Answers1

4

My understanding was that

Service="CDS.PalladiumService.Palladium"

should be referencing the underlying type.

As should the name attribute from here:

<service behaviorConfiguration="CDS.UI.Resources.Services.PalladiumBehavior"
    name="CDS.UI.Resources.Services.Palladium">

If you assign them to the actual type of the underlying service class does it resolve your issue?

Leigh S
  • 1,837
  • 11
  • 17
  • Thanks for the suggestion Leigh - "Palladium" is in fact the type of the service class. The service works completely fine, so long as the post size doesn't exceed 65k. – Nick W Nov 02 '10 at 04:50
  • Hi Nick, the service will work even if you remove the service configuration from the web.config. My point is that I believe the matching of the configuration to the service wont occur if the two elements aren't the same. – Leigh S Nov 02 '10 at 07:31
  • Thanks Leigh, that change to the config helped. After making the change the config appeared to be used by the service - although now I'm getting an entirely different error altogether. I've [created a new question here](http://stackoverflow.com/questions/4083758/wcf-webservicehostfactory-maxreceivedmessagesize-configuration) with issues I'm receiving now - you might be able to shed some light for me! – Nick W Nov 03 '10 at 02:31
  • 1
    Wish I would of found this post 3 days ago, solved my problem. I'd like to add they are apparently case sensitive as well. So watch out for that! – MisterIsaak Sep 23 '11 at 17:48