Comment faire pour consommer un Service Web WCF qui utilise le nom d'utilisateur personnalisé de validation avec une page PHP?

Je vais avoir dur de temps une sécurité WCF Service Web à partir d'un code PHP du site. Mes connaissances en PHP sont limitées, j'ai trouvé plusieurs exemples sur le Web, mais n'a pas réussi faire leur travail encore.

J'ai une application Silverlight qui consomment aussi ce WebService et il fonctionne très bien. Mais lorsque j'exécute le PHP du site, j'obtiens cette erreur :

MessageSecurityException: processeur de Sécurité n'a pas pu trouver un en-tête de sécurité dans le message. Ce pourrait être parce que le message est une non garantie de la faute ou parce qu'il n'y est une liaison à l'inadéquation entre les parties communicantes. Cela peut se produire si le service est configuré pour la sécurité et le client n'est pas à l'aide de la sécurité.

J'ai aussi essayé de changer la customBinding à un basicHttpBinding. Quand je fais ça, le nom d'utilisateur Personnalisé validateur n'est pas appelé plus. Mais, à l'aide de basicHttpBinding et la suppression de validation des titres sur mon Service WCF "oeuvres" (Outre le fait qu'il est non sécurisé). Donc, le problème semble lié au message de sécurité.

Quelqu'un pourrait me donner un exemple de travail ou un tutoriel qui pourrait m'aider à faire de cette page PHP qui fonctionne?

Voici mon code PHP :

    $options = array( 
            'soap_version'  => SOAP_1_1, 
            'exceptions'    => true, 
            'trace'         => 1, 
            'cache_wsdl'    => WSDL_CACHE_NONE,
            'Username'      => 'MyUserName', 
            'password'      => 'MyPassword');

$client = new SoapClient('https://UrlToService/Service.svc?wsdl', $options); 

try
{
    $phpresponse = $client->Get(); 

    print $phpresponse->GetResult->Version;
    echo "</b><BR/><BR/>";
}
catch(Exception $e) 
{ 
    echo "<h2>Exception Error!</h2></b>"; 
    echo $e->getMessage(); 
    echo "<BR/><BR/>";
}

Configuration WCF

<behavior name="sslBehavior">
   <serviceMetadata httpsGetEnabled="true" />
   <serviceDebug includeExceptionDetailInFaults="true" />
   <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="Custom"   customUserNamePasswordValidatorType="MyNamespace.ServiceUserNameValidator, MyNamespace" />
   </serviceCredentials>
   <serviceSecurityAudit
    auditLogLocation="Application"
    serviceAuthorizationAuditLevel="Failure"
    messageAuthenticationAuditLevel="Failure"
    suppressAuditFailure="true" />
</behavior>

<customBinding>
    <binding name="sslCustomBinding">
      <security authenticationMode="UserNameOverTransport" includeTimestamp="true" allowInsecureTransport="true">
        <localServiceSettings maxClockSkew="00:10:00" />
        <localClientSettings maxClockSkew="00:10:00" />
        <secureConversationBootstrap />
      </security>
      <textMessageEncoding messageVersion="Soap11" />
      <httpsTransport />
    </binding>
  </customBinding>

<service behaviorConfiguration="sslBehavior" name="MyNamespace.Services.Service">
    <endpoint address="" binding="customBinding" 
              bindingConfiguration="sslCustomBinding" contract="MyNamespace.ServiceContracts.IService" />
    <host>
      <baseAddresses>
        <add baseAddress="https://UrlToService/Services/" />
      </baseAddresses>
    </host>
  </service>

OriginalL'auteur PiercingDegree | 2011-07-11