Laden...

WCF WSDL Definition wird nur per https veröffentlicht

Erstellt von Wax vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.408 Views
Wax Themenstarter:in
731 Beiträge seit 2006
vor 5 Jahren
WCF WSDL Definition wird nur per https veröffentlicht

Guten Tag,

ich habe einen WCF Service (gehostet auf einem IIS 10) und dieser stellt auch seine Metadaten mittels WSDL bereit.


<serviceBehaviors>
    <behavior name="serviceBehavior">
        <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

Die Security Settings für das basicHttpBinding sehen folgendermaßen aus:


<security mode="TransportWithMessageCredential">
    <message clientCredentialType="UserName" />
</security>

Mein Service hat folgenden Metadaten-Endpunkt konfiguriert:


<endpoint name="service_httpMetadataEndpoint" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

Das funktioniert über https wunderbar!

Nun zum Problem:
Jetzt würde ich aber gerne nur http verwenden (also ohne SSL).

Also setze ich httpsGetEnabled="false" und die Security-Settings auf:


<security mode="TransportCredentialOnly">
    <message clientCredentialType="UserName" />
</security>

Ich habe gehofft, dass mir trotzdem noch der http Zugang zur WSDL Definition bleibt, nur leider ist dem nicht so. Unter "myService.svc?wsdl" finde ich dann plötzlich nichts mehr.

Hat jemand eine Ahnung warum dann plötzlich kein ?wsdl Aufruf mehr möglich ist, obwohl httpGetEnabled="true" gesetzt ist. 🤔

edit: Es wird dann plötzlich nur noch diese URL vorgeschlagen: "http://[servername]/myService.svc/mex"

Gruß
wax

286 Beiträge seit 2011
vor 5 Jahren

Wie ist das ganze denn gehostet? Auf einem IIS?

2+2=5( (für extrem große Werte von 2)

Wax Themenstarter:in
731 Beiträge seit 2006
vor 5 Jahren

Sorry für die fehlende Information.
Ja es handelt sich um einen per IIS (10) gehosteten Service.

Gruß
wax

286 Beiträge seit 2011
vor 5 Jahren

Hast du im IIS für die Website ein http-Binding eingefügt? IIS interessiert sich nämlich zunächst nicht für deine web.config sondern möchte selber konfiguriert werden.

Hast du neben dem Metadaten-Endpoint auch den eigentlichen Service-Endpoint auf http geswitcht?

OT: Wieso von https zu http switchen? Immer wenn man die Möglichkeit zu https hat sollte man dieses bevorzugen.

2+2=5( (für extrem große Werte von 2)

Wax Themenstarter:in
731 Beiträge seit 2006
vor 5 Jahren

Eine http-Bindung wurde im IIS konfiguriert.
Der eigentliche Service-Endpoint verwendet binding="basicHttpBinding" und eine bindingConfiguration mit den http Security-Settings.

OT: Der Kunde will... 😁

Gruß
wax

286 Beiträge seit 2011
vor 5 Jahren

Versuche mal den Service um einen Host zu erweitern:


<service behaviorConfiguration="serviceBehavior" name="FM.MyFancyService">
   <endpoint ... />
   <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   <host>
       <baseAddresses>            
         <add baseAddress="http://[servername]/AppName/myService.svc"/>
      </baseAddresses>
   </host>
</service>

OT: Als Auftragnehmer muss man dem Kunden auch ausreden, wenn er etwas wirklich dummes machen will.

Beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

Wax Themenstarter:in
731 Beiträge seit 2006
vor 5 Jahren

Bringt leider keine Besserung.

Hier nochmal die Auszüge aus der web.config Datei:


<behaviors>
    <endpointBehaviors>
        <behavior name="webServiceEndpointBehavior">
            <AuthenticationBehaviorExtensionElement />
            <FluentValidationBehaviorExtensionElement />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="serviceBehavior">
            <serviceDebug includeExceptionDetailInFaults="true" />
            <serviceMetadata httpGetEnabled="true" />
        </behavior>
    </serviceBehaviors>
</behaviors>


<bindings>
    <basicHttpBinding>
        <binding name="http" textEncoding="utf-8">
            <security mode="TransportCredentialOnly">
                <message clientCredentialType="UserName" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>


<service name="FancyController" behaviorConfiguration="serviceBehavior">
    <endpoint name="fancy_httpEndpoint" behaviorConfiguration="webServiceEndpointBehavior" address="" binding="basicHttpBinding" bindingConfiguration="http" contract="IFancyControllerDTO" />
    <endpoint name="fancy_httpMetadataEndpoint" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
        <baseAddresses>
            <add baseAddress="http://localhost:8082/Controllers/FancyController.svc"/>
        </baseAddresses>
    </host>
</service>