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" %>
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?