Wie? WCF customBinding über Https

Ich versuche zum einrichten einer WCF-Dienst für internen Gebrauch, auf unserer nach außen gerichteten web-farm (wir haben nicht eine web-farm intern, und ich brauche diesen service zu haben, failover und load-balancing).

Anforderungen:

  • PerSession Zustand, als wir den Dienst benötigen, um retain-variable Daten für jede Sitzung.
  • HTTPS. Nach viel googeln habe ich gelesen, ich brauchte, um zu erstellen ein customBinding, was ich getan habe, aber nicht sicher, ob es richtig ist.
  • Nachrichtengröße, als einer der Parameter ist ein byte[] array, die ein Maximum von 5 MB.
  • keine Notwendigkeit, manuell Bearbeiten der client-Seite der app.config. dh, ich muss die Entwickler einfach den Dienstverweis hinzufügen, und dann beginnt mit dem Objekt, ohne fummelig wechseln der app.config.

Hinweis: ich habe zuvor diesen Dienst funktioniert unter HTTP richtig (mit wsHttpBinding).
Ich habe auch hatte es unter HTTPS, aber es hat nicht unterstützen PerSession Zustand, und verlor interne variable Werte jeder Funktion.

Ich bin derzeit immer diese Fehler vom test harness:

Konnte nicht finden, Standard-endpoint-element, das Verweise Vertrag " AppMonitor.IAppMonitorWcfService " im ServiceModel-clientkonfigurationsabschnitt. Dies könnte daran liegen, dass keine Konfigurations-Datei gefunden wurde, für Ihre Anwendung, oder weil keine endpoint-element dazu passenden Vertrag gefunden werden konnte, der in der client-element.

HINWEIS: Der Fehler entsteht auf einer Testumgebung EXE, hat der WCF-service direkt verwiesen unter Service-Verweise. Das ist nicht das problem, eine exe verweisen auf ein anderes Objekt, das verweist dann auf der WCF-service, dass hab ich überlesen.

Die WSDL wird korrekt angezeigt, wenn der Browser die URL.

Web.Config:

  <system.serviceModel>
    <services>
      <service name="AppMonitor.AppMonitorWcfService" behaviorConfiguration="ServiceBehavior">
        <endpoint address="" binding="customBinding" bindingConfiguration="EnablePerSessionUnderHttps" contract="AppMonitor.IAppMonitorWcfService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>

    <bindings>
      <customBinding>
        <binding name="EnablePerSessionUnderHttps" maxReceivedMessageSize="5242880">
          <reliableSession ordered="true"/>
          <textMessageEncoding>
            <readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          </textMessageEncoding>
          <httpsTransport authenticationScheme="Anonymous" requireClientCertificate="false"/>
        </binding>
      </customBinding>
    </bindings>

    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

EXE App.config (auto-erzeugt beim hinzufügen der Service Referenz):

<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="CustomBinding_IAppMonitorWcfService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="true" />
                    <security mode="Transport">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            establishSecurityContext="true" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client />
    </system.serviceModel>
</configuration>

Ich bin nicht sicher, warum die app.config zeigt wsHttpBinding? Sollte dies nicht sein customBinding?
Ich wirklich nicht wollen, Bearbeiten Sie die app.config, als dieser Dienst wird von Dutzenden von Entwicklern, und ich will, dass Sie nur in der Lage sein, um den Dienstverweis hinzufügen, und Weg Sie gehen...

Mit VS2008, .NET 3.51.
Ich denke, server IIS7, Windows Server 2008, kann das bestätigen, wenn nötig.

InformationsquelleAutor AaronC | 2011-03-16
Schreibe einen Kommentar