.NET 4 WCF SOAP Service Http-POST wird 404 not Found
Ich habe gehostete WCF-SOAP-service, die ich bin in der Lage zu schlagen aus dem browser sowie aus meinem SOAP-client gut, wenn Sie HTTP-GET-Anfragen, jedoch, wenn Sie mit HTTP POST-Anfragen, die Antwort ist ein 404 Nicht Gefunden.
Meine Web.config sieht wie folgt aus:
<system.serviceModel>
<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" httpsGetEnabled="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 -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<bindings>
<wsHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
<readerQuotas maxDepth="15" maxStringContentLength="524288" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</wsHttpBinding>
<basicHttpBinding>
<binding>
<readerQuotas maxDepth="15" maxStringContentLength="524288" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Mein service definiert ist, in das markup mit dem .svc-Datei als:
<%@ ServiceHost Language="C#" Debug="true" Service="Boca.WebServices.Billing.QBService" CodeBehind="QBService.svc.cs" %>
Wieder, ich schlagen können meinen service über den browser und ein SOAP-client wie folgt mithilfe einer HTTP-GET, aber nicht mit HTTP POST:
Was mache ich falsch? Sollte ich nicht mit dem .svc-markup und einfach definieren, meinen Dienst im Web.config?
UPDATE:
Wenn ich "start debug" mein WCF-Projekt innerhalb von VS 2010 mit IIS Express auf einem localhost:8181 port, der HTTP-POSTS an die service-arbeiten. Es ist nur, wenn der service gehostet wird, über den IIS HTTP-POST an den Dienst abgelehnt werden oder gar nicht gefunden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem gelöst. Es war schließlich nicht ein IIS-Problem, eher ein Problem mit mir oder nicht konfigurieren
<basicHttpBinding>
mit<security>
Knoten. Ich din nicht gründlich gelesen zu Bindungen und wie Sie arbeiten, so dass ich dachte, dass das hinzufügen der<wsHttpBinding>
neben der<basicHttpBinding>
hinzufügen würde, die SSL-Unterstützung für WCF.Tun, und konfigurieren Sie die Standard -
<wsHttpBinding>
mit der<security>
Knoten definitiv erlaubt mir, um die SEIFE Metadaten sicher auch wenn es intern war immer noch mit der<basicHttpBinding>
, jedoch werden die POSTs wurden nicht unterstützt.Ich aktualisiert meine Konfiguration so, dass die
transport clientCredentialType
warNone
und dass das Problem gelöst:Vorausgesetzt, Sie verwenden .NET 4 Ihr service hören auf einer oder mehreren Endpunkten mit "basicHttpBinding" - dies ist die Standardeinstellung, wenn Sie nicht geben Sie einen Endpunkt bei der Verwendung von HTTP
Wenn Sie nur einen service-Vertrag dann Ihren Dienst lauscht nach HTTP-POST an die Adresse endet mit .svc. Wenn Sie mehr als einen service-Vertrag dann beherbergt es bei jedem Vertrag an eine Adresse, die wie
<path to .svc>/<serviceContractname>
Den Dienst erwartet wird eine SOAP-Anforderung, so dass Sie benötigen, um POST eines XML-Dokuments entspricht, SOAP 1.1 ("basicHttpBinding" Standardeinstellungen für diesen). Der einfachste Weg, dies zu erreichen, ist das erstellen eines Proxys mit Hinzufügen eines dienstverweises in einem client-Projekt und machen Anrufe über die generierte proxy-Klasse des WCF-Sanitär generiert die entsprechende Nachricht und senden Sie es an die service