Gå til innhold

WEB Service (WCF) som feiler med "Bad Request Error 400)


Anbefalte innlegg

Folkens. Jeg sliter skikkelig med nevnte problem. Jeg har altså en web service gående på en ekster server som skal ta imot faktura med vedlegg. Datamengen som sendes kan dærfor være stor. Hvis jeg sender bare en faktura og et knøttlite vedlegg (10K) så funker det som bare det. Jeg har selvsagt googlet dette og det kommer en masse treff, men ingen som går direkte på det jeg trenger så vidt jeg kan se. Ok. Her er detaljene:

 

API på web service er prototypet slik:

 

[serviceCotract]
public interface IInvoiceDist
{
 [OperationContract]
 void SendInvoices(List<InvoiceRecord> pInvoices, List<AttachmentRecord> pAttachments);
}

 

Som dere ser så sendes en liste med invoices og en liste med tilhørende vedlegg

 

Jeg har sett rundt omkring i andre web servicer som jeg bruker og funnet at man skal sette max størrelser her og der. Følgelig ser min App.Config ut slik:

<system.serviceModel>
   <bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IInvoiceDist"
			 closeTimeout="00:01:00"
			 openTimeout="00:01:00"
			 receiveTimeout="00:10:00"
			 sendTimeout="00:01:00"
			 allowCookies="false"
			 bypassProxyOnLocal="false"
			 maxBufferPoolSize="2147483647"
			 maxBufferSize="2147483647"
			 maxReceivedMessageSize="2147483647"
			 useDefaultWebProxy="true">
	  <readerQuotas
			 maxDepth="32"
			 maxStringContentLength="2147483647"
			 maxArrayLength="2147483647"
			 maxBytesPerRead="2147483647"
			 maxNameTableCharCount="2147483647" />
....

Som dere ser så har jeg altså satt max størrelser helt opp til 2GB og det burde jaggu holde...

 

Så hva kan jeg da ha gjort feil ? Mangler jeg noe i denne configen ?

Jeg ser også at mange snakker om web.config. Men når jeg åpner den filen så inneholder den jo ikke noe som helst i nærheten av dette. Bare en masse andre settings. Ingen BINDING seksjon i det hele tatt. Jeg har alikevel en fæølelse av at det fullt mulig buirde vært plassert tilsvarende verdier i den filen også, men har ikke noe som helst aning om hvor og under hvilke tags dette skulel vært.

 

Noen sm kan hjelpe meg litt her....

 

Takker for alle bidrag

Lenke til kommentar
Videoannonse
Annonse

Om dette er den eneste configen du har under &--#60;system.serviceModel&--#62; så vil den ikke bli tatt i bruk, først og fremst fordi den har et navn og dermed er ikke den default for basicHttpBindings. Du bør som minimum har noe slikt som dette:

 

<system.serviceModel>
 <services>
   <service name="Full.Namespace.InvoiceDist">
  <endpoint binding="basicHttpBinding"
                      contract="Full.Namespace.IInvoiceDist" />
   </service>
 </services>
 <bindings>
   <basicHttpBinding>
  <binding closeTimeout="00:01:00"
		   openTimeout="00:01:00"
		   receiveTimeout="00:10:00"
		   sendTimeout="00:01:00"
		   allowCookies="false"
		   bypassProxyOnLocal="false"
		   maxBufferPoolSize="2147483647"
		   maxBufferSize="2147483647"
		   maxReceivedMessageSize="2147483647"
		   useDefaultWebProxy="true">
    <readerQuotas maxDepth="32"
				  maxStringContentLength="2147483647"
				  maxArrayLength="2147483647"
				  maxBytesPerRead="2147483647"
				  maxNameTableCharCount="2147483647" />
  </binding>
   </basicHttpBinding>
 </bindings>
</system.serviceModel>

 

Legg merke til at jeg har tatt bort name slik at dette blir default for basicHttpBindings. Du kan bruke et navn, men da må du bruke bindingConfiguration propertyen på endpoint for å angi hvilken named binding du skal bruke.

Endret av The Jackal
Lenke til kommentar

Dette var veldig nyttig!! Takker. Det funker - nesten - . Nå får jeg en ny melding hvis filen er litt større. Jeg har laget et vedlegg på litt over 5MB og nå får jeg denne:

 

- $exception {"Innholdstypen text/html til svarmeldingen er ikke i samsvar med innholdstypen til bindingen (text/xml; charset=utf-8). Hvis du bruker en egendefinert koder, må du kontrollere at IsContentTypeSupported-metoden er riktig implementert......

 

Videre sier inner exception dette:

Den eksterne serveren returnerte feilen (500) Intern serverfeil ved System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)"

 

Jeg har satt alle timeout parameterene (jeg kjenner til ) til 10 minutter.

Lenke til kommentar

Muligens dette som er feil? http://stackoverflow.com/questions/8637652/wcf-charset-utf-8-of-the-response-message-does-not-match-the-content-type-of-the

 

Generelt sett forresten...ta bort alle ting som du ikke trenger å gjøre om på fra konfigurasjonen. Altså, om du ikke spesifikt ønsker å sette useDefaultWebProxy=true på bindingen, så ta det bort. Det gjør ting litt mer oversiktelig og enklere å forstå.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...