Frage

Ich verwende VSTS 2008 + C# + .NET 3.0.Ich bin mit einem selbst gehosteten WCF-Dienst.Bei der Ausführung der folgenden Anweisung, gibt es die folgenden "Bindung nicht gefunden" Fehler.Ich habe mein ganzes app.config-Datei, irgendwelche Ideen, was ist falsch?

ServiceHost host = new ServiceHost(typeof(MyWCFService));

Fehlermeldung:

Konnte nicht finden, eine Basisadresse entspricht Schema http für den Endpunkt mit der Bindung MetadataExchangeHttpBinding.Registriert base Adresse Regelungen sind [https].

Volle app.config:

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MyBinding"
            closeTimeout="00:00:10"
            openTimeout="00:00:20"
            receiveTimeout="00:00:30"
            sendTimeout="00:00:40"
            bypassProxyOnLocal="false"
            transactionFlow="false"
            hostNameComparisonMode="WeakWildcard"
            maxReceivedMessageSize="100000000"
            messageEncoding="Mtom"
            proxyAddress="http://foo/bar"
            textEncoding="utf-16"
            useDefaultWebProxy="false">
          <reliableSession ordered="false"
               inactivityTimeout="00:02:00"
               enabled="true" />
          <security mode="Transport">
            <transport clientCredentialType="Digest"
               proxyCredentialType="None"
               realm="someRealm" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="MyWCFService"
                behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="IMyService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
War es hilfreich?

Lösung

Die Basis-Adresse für den service definiert "HTTPS://" -, aber Ihre mex-Adresse "HTTP".

Wenn Sie möchten, dass Ihr Dienst https:// verwenden, müssen Sie die mexHttpsBinding sowie:

<services>
    <service name="MyWCFService" behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" 
                binding="wsHttpBinding" 
                bindingConfiguration="MyBinding" 
                contract="IMyService" 
        />
        <endpoint address="mex" 
                binding="mexHttpsBinding" 
                contract="IMetadataExchange" 
        />
    </service>
</services>

Marc

Andere Tipps

Kann ich mich für die doppelte Punktzahl?:)

Wie Sie mit WS-Http-Bindung an eine HTTPS-Protokoll, so müssen Sie die richtige MEX-Bindung;

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />

Ich habe eine Frage in einem Kommentar für Marc_s Antwort

Ist es möglich zu haben IMetadataExchange für http-und https als separate Endpunkte?

marc_s beantwortet

Sie sollten in der Lage sein zu definieren, einen zweiten Basisadresse, für " http:// verwenden, die für die http-mex-Endpunkt.

Also, die Lösung ist zu erklären, mehrere Endpunkte mit der GLEICHEN address="mex" und verschiedene Bindungen wie in der folgenden

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

Vor kurzem habe ich festgestellt, dass es einfacher zu haben eine Konfiguration Schalter, verwendet werden können, zu ermöglichen, MEX-on-test und deaktivieren Sie auf Live.

Von http://msdn.microsoft.com/en-us/library/aa395224.aspx

Es ist möglich, die ServiceHostFactory Klasse zum erstellen einer benutzerdefinierten abgeleitet von ServiceHost in den Internet Information Services (IIS benutzerdefinierten ServiceHost fügt hinzu, dass die ServiceMetadataBehavior (die ermöglicht die Veröffentlichung von Metadaten), auch wenn dieses Verhalten nicht explizit Hinzugefügt in the service configuration file.

Schreiben Sie die Imperativ-code, dass ermöglicht die Veröffentlichung von Metadaten und einmal dann ist die Wiederverwendung von code über mehrere verschiedene Dienste.Dies ist erreicht eine neue Klasse zu erstellen, die sich von ServiceHost und überschreibt die ApplyConfiguration () - Methode zwingend hinzufügen metadata publishing behavior.

Beispiel-code von Custom Service Host MSDN-Artikel

//Add a metadata endpoint at each base address
//using the "/mex" addressing convention
foreach (Uri baseAddress in this.BaseAddresses)
{
    if (baseAddress.Scheme == Uri.UriSchemeHttp)
    {
        mexBehavior.HttpGetEnabled = true;
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexHttpBinding(),
                                "mex");
    }
    else if (baseAddress.Scheme == Uri.UriSchemeHttps)
    {
        mexBehavior.HttpsGetEnabled = true;
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexHttpsBinding(),
                                "mex");
    }
    else if (baseAddress.Scheme == Uri.UriSchemeNetPipe)
    {
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexNamedPipeBinding(),
                                "mex");
    }
    else if (baseAddress.Scheme == Uri.UriSchemeNetTcp)
    {
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexTcpBinding(),
                                "mex");
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top