2 Stimmen

WCF AllowNTLM .net 3.5sp1 und IIS7.5

Ich erhalte den folgenden Fehler, wenn ich WCF verwende und einen WCF-Dienst auf einem anderen Server aufrufe.

Ein Fehler (Die Anfrage wurde storniert) ist bei der Übertragung von Daten über den über den HTTP-Kanal.

Die folgenden Dienste funktionierten auf einer IIS7 Box auf .net3, aber wir haben vor kurzem auf IIS7.5 und .net 3.5sp1 aktualisiert, wenn ich das AllowNtlm-Attribut aus der Config entferne, wird der Aufruf weiter, aber nicht weitergeben, damit der Dienst einen doppelten Sprung zur Datenbank machen kann, ich erhalte dann den folgenden Fehler.

NT-BEHÖRDE \ANONYMOUS LOGON".

Ich habe eine Kopie der client app.config beigefügt, die mit iis7 funktionierte, aber

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Windows">
          <clientCredentials>
            <windows allowNtlm="false" allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="4194304"></dataContractSerializer>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="4194304" maxReceivedMessageSize="4194304" messageEncoding="Text" name="BasicHttpBinding_CalculationWebService" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:10:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192"></readerQuotas>
          <security mode="TransportCredentialOnly">
            <message algorithmSuite="Default" clientCredentialType="UserName"></message>
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://server1.domain/WebServices/CacheManagement/CacheBusinessService.svc" behaviorConfiguration="Windows" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CacheWebService" contract="CacheWCFService.CacheWebService" name="BasicHttpBinding_CacheWebService">
        <identity>
          <servicePrincipalName value="http/server1.domain"></servicePrincipalName>
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

Dies ist die Serverkonfiguration, haben Sie eine Idee?

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="CacheManagementBehavior" name="Iris.WebServices.CacheManagement.CacheWebService">
        <endpoint address="" behaviorConfiguration="" binding="basicHttpBinding"
         bindingConfiguration="basicHttpBinding_CacheManagement" contract="Iris.WebServices.CacheManagement.CacheWebService" />
        <endpoint address="mex" behaviorConfiguration="" binding="basicHttpBinding"
         bindingConfiguration="basicHttpBinding_CacheManagement" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBinding_CacheManagement" maxReceivedMessageSize="4194304" receiveTimeout="00:30:00">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CacheManagementBehavior">
          <dataContractSerializer maxItemsInObjectGraph="4194304" ignoreExtensionDataObject="True"/>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
          <serviceAuthorization impersonateCallerForAllOperations="true"/>
        </behavior>a
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

2voto

Iain Punkte 6252

Wir konnten das Problem beheben, indem wir ServicePrincipleName aus der Konfiguration entfernt haben

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Windows">
          <clientCredentials>
            <windows allowNtlm="false" allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="4194304"></dataContractSerializer>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="4194304" maxReceivedMessageSize="4194304" messageEncoding="Text" name="BasicHttpBinding_CalculationWebService" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:10:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192"></readerQuotas>
          <security mode="TransportCredentialOnly">
            <message algorithmSuite="Default" clientCredentialType="UserName"></message>
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://server1.domain/WebServices/CacheManagement/CacheBusinessService.svc" behaviorConfiguration="Windows" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CacheWebService" contract="CacheWCFService.CacheWebService" name="BasicHttpBinding_CacheWebService" />
    </client>
  </system.serviceModel>
</configuration>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X