Megosztás a következőn keresztül:


Engedélyezési szabályzat

Ez a minta bemutatja, hogyan implementálhat egyéni jogcím-engedélyezési szabályzatot és egy társított egyéni szolgáltatás-engedélyezési kezelőt. Ez akkor hasznos, ha a szolgáltatás jogcímalapú hozzáférés-ellenőrzéseket végez a szolgáltatásműveletekhez, és a hozzáférés-ellenőrzések előtt bizonyos jogosultságokat biztosít a hívónak. Ez a minta bemutatja a jogcímek hozzáadásának folyamatát, valamint a hozzáférés-ellenőrzés folyamatát a véglegesített jogcímkészleten. Az ügyfél és a kiszolgáló közötti összes alkalmazásüzenet aláírt és titkosított. A kötéssel alapértelmezés szerint az wsHttpBinding ügyfél által megadott felhasználónév és jelszó használatával lehet bejelentkezni egy érvényes Windows-fiókba. Ez a minta bemutatja, hogyan használható egyéni UserNamePasswordValidator az ügyfél hitelesítésére. Ez a minta azt is mutatja, hogy az ügyfél X.509-tanúsítvány használatával hitelesíti a szolgáltatást. Ez a minta egy implementációt IAuthorizationPolicyServiceAuthorizationManagermutat be, amely közöttük adott felhasználók számára biztosít hozzáférést a szolgáltatás meghatározott módszereihez. Ez a minta az üzenetbiztonsági felhasználónéven alapul, de bemutatja, hogyan hajthat végre jogcímátalakítást a ServiceAuthorizationManager hívás előtt.

Feljegyzés

A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.

Összefoglalva ez a minta bemutatja, hogyan:

  • Az ügyfél felhasználóneves jelszóval hitelesíthető.

  • Az ügyfél egy X.509-tanúsítvánnyal hitelesíthető.

  • A kiszolgáló ellenőrzi az ügyfél hitelesítő adatait egy egyéni UsernamePassword érvényesítőn.

  • A kiszolgáló hitelesítése a kiszolgáló X.509-tanúsítványával történik.

  • A kiszolgáló a szolgáltatás bizonyos metódusaihoz való hozzáférés szabályozására használható ServiceAuthorizationManager .

  • Implementálás IAuthorizationPolicy.

A szolgáltatás két végpontot tesz elérhetővé a szolgáltatással való kommunikációhoz, az App.config konfigurációs fájllal definiálva. Minden végpont egy címből, egy kötésből és egy szerződésből áll. Egy kötés egy szabványos wsHttpBinding kötéssel van konfigurálva, amely WS-Security- és ügyfél-felhasználónév-hitelesítést használ. A másik kötés egy szabványos wsHttpBinding kötéssel van konfigurálva, amely WS-Security és ügyféltanúsítvány-hitelesítést használ. A <viselkedés> azt határozza meg, hogy a felhasználói hitelesítő adatokat a szolgáltatáshitelesítéshez kell használni. A kiszolgálótanúsítványnak ugyanazt az értéket kell tartalmaznia a SubjectName tulajdonsághoz, mint a findValue<serviceCertificate> attribútuma.

<system.serviceModel>
  <services>
    <service name="Microsoft.ServiceModel.Samples.CalculatorService"
             behaviorConfiguration="CalculatorServiceBehavior">
      <host>
        <baseAddresses>
          <!-- configure base address provided by host -->
          <add baseAddress ="http://localhost:8001/servicemodelsamples/service"/>
        </baseAddresses>
      </host>
      <!-- use base address provided by host, provide two endpoints -->
      <endpoint address="username"
                binding="wsHttpBinding"
                bindingConfiguration="Binding1"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
      <endpoint address="certificate"
                binding="wsHttpBinding"
                bindingConfiguration="Binding2"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </service>
  </services>

  <bindings>
    <wsHttpBinding>
      <!-- Username binding -->
      <binding name="Binding1">
        <security mode="Message">
    <message clientCredentialType="UserName" />
        </security>
      </binding>
      <!-- X509 certificate binding -->
      <binding name="Binding2">
        <security mode="Message">
          <message clientCredentialType="Certificate" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>

  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior" >
        <serviceDebug includeExceptionDetailInFaults ="true" />
        <serviceCredentials>
          <!--
          The serviceCredentials behavior allows one to specify a custom validator for username/password combinations.
          -->
          <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.MyCustomUserNameValidator, service" />
          <!--
          The serviceCredentials behavior allows one to specify authentication constraints on client certificates.
          -->
          <clientCertificate>
            <!--
            Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
            is in the user's Trusted People store, then it will be trusted without performing a
            validation of the certificate's issuer chain. This setting is used here for convenience so that the
            sample can be run without having to have certificates issued by a certification authority (CA).
            This setting is less secure than the default, ChainTrust. The security implications of this
            setting should be carefully considered before using PeerOrChainTrust in production code.
            -->
            <authentication certificateValidationMode="PeerOrChainTrust" />
          </clientCertificate>
          <!--
          The serviceCredentials behavior allows one to define a service certificate.
          A service certificate is used by a client to authenticate the service and provide message protection.
          This configuration references the "localhost" certificate installed during the setup instructions.
          -->
          <serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
        </serviceCredentials>
        <serviceAuthorization serviceAuthorizationManagerType="Microsoft.ServiceModel.Samples.MyServiceAuthorizationManager, service">
          <!--
          The serviceAuthorization behavior allows one to specify custom authorization policies.
          -->
          <authorizationPolicies>
            <add policyType="Microsoft.ServiceModel.Samples.CustomAuthorizationPolicy.MyAuthorizationPolicy, PolicyLibrary" />
          </authorizationPolicies>
        </serviceAuthorization>
      </behavior>
    </serviceBehaviors>
  </behaviors>

</system.serviceModel>

Minden ügyfélvégpont-konfiguráció egy konfigurációs névből, a szolgáltatásvégpont abszolút címéből, a kötésből és a szerződésből áll. Az ügyfélkötés az ebben az esetben a biztonságban <> megadott és clientCredentialType az< üzenetben> megadott biztonsági móddal van konfigurálva.

<system.serviceModel>

    <client>
      <!-- Username based endpoint -->
      <endpoint name="Username"
            address="http://localhost:8001/servicemodelsamples/service/username"
    binding="wsHttpBinding"
    bindingConfiguration="Binding1"
                behaviorConfiguration="ClientCertificateBehavior"
                contract="Microsoft.ServiceModel.Samples.ICalculator" >
      </endpoint>
      <!-- X509 certificate based endpoint -->
      <endpoint name="Certificate"
                        address="http://localhost:8001/servicemodelsamples/service/certificate"
                binding="wsHttpBinding"
            bindingConfiguration="Binding2"
                behaviorConfiguration="ClientCertificateBehavior"
                contract="Microsoft.ServiceModel.Samples.ICalculator">
      </endpoint>
    </client>

    <bindings>
      <wsHttpBinding>
        <!-- Username binding -->
      <binding name="Binding1">
        <security mode="Message">
          <message clientCredentialType="UserName" />
        </security>
      </binding>
        <!-- X509 certificate binding -->
        <binding name="Binding2">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
    </wsHttpBinding>
    </bindings>

    <behaviors>
      <behavior name="ClientCertificateBehavior">
        <clientCredentials>
          <serviceCertificate>
            <!--
            Setting the certificateValidationMode to PeerOrChainTrust
            means that if the certificate
            is in the user's Trusted People store, then it will be
            trusted without performing a
            validation of the certificate's issuer chain. This setting
            is used here for convenience so that the
            sample can be run without having to have certificates
            issued by a certification authority (CA).
            This setting is less secure than the default, ChainTrust.
            The security implications of this
            setting should be carefully considered before using
            PeerOrChainTrust in production code.
            -->
            <authentication certificateValidationMode = "PeerOrChainTrust" />
          </serviceCertificate>
        </clientCredentials>
      </behavior>
    </behaviors>

  </system.serviceModel>

A felhasználónévalapú végpont esetében az ügyfél implementációja beállítja a használni kívánt felhasználónevet és jelszót.

// Create a client with Username endpoint configuration
CalculatorClient client1 = new CalculatorClient("Username");

client1.ClientCredentials.UserName.UserName = "test1";
client1.ClientCredentials.UserName.Password = "1tset";

try
{
    // Call the Add service operation.
    double value1 = 100.00D;
    double value2 = 15.99D;
    double result = client1.Add(value1, value2);
    Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
    ...
}
catch (Exception e)
{
    Console.WriteLine("Call failed : {0}", e.Message);
}

client1.Close();

A tanúsítványalapú végpont esetében az ügyfél-implementáció beállítja az ügyféltanúsítvány használatát.

// Create a client with Certificate endpoint configuration
CalculatorClient client2 = new CalculatorClient("Certificate");

client2.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "test1");

try
{
    // Call the Add service operation.
    double value1 = 100.00D;
    double value2 = 15.99D;
    double result = client2.Add(value1, value2);
    Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
    ...
}
catch (Exception e)
{
    Console.WriteLine("Call failed : {0}", e.Message);
}

client2.Close();

Ez a minta egyéni UserNamePasswordValidator módon ellenőrzi a felhasználóneveket és jelszavakat. A minta implementálja a MyCustomUserNamePasswordValidatorkövetkezőből UserNamePasswordValidatorszármaztatva: . További információkért tekintse meg a dokumentációt UserNamePasswordValidator . Az egyéni érvényesítő minta a jelszóval UserNamePasswordValidatorvaló integráció bemutatásához implementálja azt a módszert, amellyel elfogadhatja azokat a Validate felhasználóneveket/jelszópárokat, ahol a felhasználónév megegyezik a jelszóval az alábbi kódban látható módon.

public class MyCustomUserNamePasswordValidator : UserNamePasswordValidator
{
  // This method validates users. It allows in two users,
  // test1 and test2 with passwords 1tset and 2tset respectively.
  // This code is for illustration purposes only and
  // MUST NOT be used in a production environment because it
  // is NOT secure.
  public override void Validate(string userName, string password)
  {
    if (null == userName || null == password)
    {
      throw new ArgumentNullException();
    }

    if (!(userName == "test1" && password == "1tset") && !(userName == "test2" && password == "2tset"))
    {
      throw new SecurityTokenException("Unknown Username or Password");
    }
  }
}

Miután az érvényesítő implementálva van a szolgáltatáskódban, a szolgáltatás gazdagépét tájékoztatni kell a használni kívánt érvényesítő példányról. Ez a következő kóddal történik:

Servicehost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new MyCustomUserNamePasswordValidatorProvider();

Vagy ugyanezt is megteheti a konfigurációban:

<behavior>
    <serviceCredentials>
      <!--
      The serviceCredentials behavior allows one to specify a custom validator for username/password combinations.
      -->
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.MyCustomUserNameValidator, service" />
    ...
    </serviceCredentials>
</behavior>

A Windows Communication Foundation (WCF) gazdag jogcímalapú modellt biztosít a hozzáférés-ellenőrzések végrehajtásához. Az ServiceAuthorizationManager objektum a hozzáférés-ellenőrzés végrehajtására szolgál, és megállapítja, hogy az ügyfélhez társított jogcímek megfelelnek-e a szolgáltatás metódushoz való hozzáféréshez szükséges követelményeknek.

A bemutató céljából ez a minta egy olyan implementációt ServiceAuthorizationManager mutat be, amely implementálja azt a CheckAccessCore módszert, amely lehetővé teszi a felhasználó hozzáférését a metódusokhoz olyan típusú http://example.com/claims/allowedoperation jogcímek alapján, amelyek értéke a meghívható művelet műveleti URI-ja.

public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
  protected override bool CheckAccessCore(OperationContext operationContext)
  {
    string action = operationContext.RequestContext.RequestMessage.Headers.Action;
    Console.WriteLine("action: {0}", action);
    foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
    {
      if ( cs.Issuer == ClaimSet.System )
      {
        foreach (Claim c in cs.FindClaims("http://example.com/claims/allowedoperation", Rights.PossessProperty))
        {
          Console.WriteLine("resource: {0}", c.Resource.ToString());
          if (action == c.Resource.ToString())
            return true;
        }
      }
    }
    return false;
  }
}

Az egyéni ServiceAuthorizationManager beállítás implementálása után a szolgáltatás gazdagépét tájékoztatni kell a ServiceAuthorizationManager használatról. Ez az alábbi kódban látható módon történik.

<behavior>
    ...
    <serviceAuthorization serviceAuthorizationManagerType="Microsoft.ServiceModel.Samples.MyServiceAuthorizationManager, service">
        ...
    </serviceAuthorization>
</behavior>

A megvalósítás elsődleges IAuthorizationPolicy módszere a Evaluate(EvaluationContext, Object) metódus.

public class MyAuthorizationPolicy : IAuthorizationPolicy
{
    string id;

    public MyAuthorizationPolicy()
    {
    id =  Guid.NewGuid().ToString();
    }

    public bool Evaluate(EvaluationContext evaluationContext,
                                            ref object state)
    {
        bool bRet = false;
        CustomAuthState customstate = null;

        if (state == null)
        {
            customstate = new CustomAuthState();
            state = customstate;
        }
        else
            customstate = (CustomAuthState)state;
        Console.WriteLine("In Evaluate");
        if (!customstate.ClaimsAdded)
        {
           IList<Claim> claims = new List<Claim>();

           foreach (ClaimSet cs in evaluationContext.ClaimSets)
              foreach (Claim c in cs.FindClaims(ClaimTypes.Name,
                                         Rights.PossessProperty))
                  foreach (string s in
                        GetAllowedOpList(c.Resource.ToString()))
                  {
                       claims.Add(new
               Claim("http://example.com/claims/allowedoperation",
                                    s, Rights.PossessProperty));
                            Console.WriteLine("Claim added {0}", s);
                      }
                   evaluationContext.AddClaimSet(this,
                           new DefaultClaimSet(this.Issuer,claims));
                   customstate.ClaimsAdded = true;
                   bRet = true;
                }
         else
         {
              bRet = true;
         }
         return bRet;
     }
...
}

Az előző kód bemutatja, hogyan ellenőrzi a Evaluate(EvaluationContext, Object) metódus, hogy nem lettek-e olyan új jogcímek hozzáadva, amelyek befolyásolják a feldolgozást, és hogyan adnak hozzá konkrét jogcímeket. Az engedélyezett jogcímek a GetAllowedOpList metódusból származnak, amely a felhasználó által végrehajtható műveletek meghatározott listájának visszaadására van implementálva. Az engedélyezési szabályzat jogcímeket ad hozzá az adott művelethez való hozzáféréshez. Ezt később a ServiceAuthorizationManager hozzáférés-ellenőrzési döntések végrehajtására használják.

Az egyéni IAuthorizationPolicy beállítás implementálása után a szolgáltatás gazdagépét tájékoztatni kell a használni kívánt engedélyezési szabályzatokról.

<serviceAuthorization>
       <authorizationPolicies>
            <add policyType='Microsoft.ServiceModel.Samples.CustomAuthorizationPolicy.MyAuthorizationPolicy, PolicyLibrary' />
       </authorizationPolicies>
</serviceAuthorization>

A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Az ügyfél sikeresen meghívja a Hozzáadás, kivonás és több metódust, és "Hozzáférés megtagadva" üzenet jelenik meg a Divide metódus meghívásakor. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.

Batch-fájl beállítása

A mintában szereplő Setup.bat kötegfájl lehetővé teszi a kiszolgáló megfelelő tanúsítványokkal való konfigurálását egy olyan saját üzemeltetésű alkalmazás futtatásához, amely kiszolgálói tanúsítványalapú biztonságot igényel.

Az alábbiak rövid áttekintést nyújtanak a kötegfájlok különböző szakaszairól, hogy a megfelelő konfigurációban való futtatásukhoz módosíthatók legyenek:

  • A kiszolgálótanúsítvány létrehozása.

    A Setup.bat kötegfájl alábbi sorai hozzák létre a használni kívánt kiszolgálótanúsítványt. A(z) %Standard kiadás RVER_NAME% változó megadja a kiszolgáló nevét. Módosítsa ezt a változót a saját kiszolgáló nevének megadásához. Az alapértelmezett érték a localhost.

    echo ************
    echo Server cert setup starting
    echo %SERVER_NAME%
    echo ************
    echo making server cert
    echo ************
    makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe
    
  • A kiszolgálótanúsítvány telepítése az ügyfél megbízható tanúsítványtárolójába.

    A Setup.bat kötegfájl alábbi sorai másolja a kiszolgálótanúsítványt az ügyfél megbízható személyek tárolójába. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat az ügyfélrendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy ügyfél megbízható főtanúsítványában gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges az ügyféltanúsítvány-tároló kiszolgálótanúsítvánnyal való feltöltésének ez a lépése.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
    
  • Az ügyféltanúsítvány létrehozása.

    A Setup.bat kötegfájl alábbi sorai hozzák létre a használni kívánt ügyféltanúsítványt. A%U Standard kiadás R_NAME% változó megadja a kiszolgáló nevét. Ez az érték a "test1" értékre van állítva, mert ez a név, amelyet a IAuthorizationPolicy rendszer keres. Ha a(z) %U Standard kiadás R_NAME% értékét módosítja, a metódus megfelelő értékét kell módosítaniaIAuthorizationPolicy.Evaluate.

    A tanúsítvány a Saját (Személyes) tárolóban, a CurrentUser tároló helyén található.

    echo ************
    echo making client cert
    echo ************
    makecert.exe -sr CurrentUser -ss MY -a sha1 -n CN=%CLIENT_NAME% -sky exchange -pe
    
  • Az ügyféltanúsítvány telepítése a kiszolgáló megbízható tanúsítványtárolójába.

    A Setup.bat kötegfájl alábbi sorai másolja az ügyféltanúsítványt a megbízható személyek tárolójába. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat a kiszolgálórendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy megbízható főtanúsítványban gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges a kiszolgálói tanúsítványtároló ügyféltanúsítvánnyal való feltöltésének ez a lépése.

    certmgr.exe -add -r CurrentUser -s My -c -n %CLIENT_NAME% -r LocalMachine -s TrustedPeople
    

A minta beállítása és létrehozása

  1. A megoldás létrehozásához kövesse a Windows Communication Foundation-minták készítésére vonatkozó utasításokat.

  2. A minta egy- vagy számítógépközi konfigurációban való futtatásához kövesse az alábbi utasításokat.

Feljegyzés

Ha Svcutil.exe használ a minta konfigurációjának újragenerálásához, mindenképpen módosítsa az ügyfélkonfiguráció végpontnevét az ügyfélkódnak megfelelően.

A minta futtatása ugyanazon a számítógépen

  1. Nyissa meg a Visual Studio fejlesztői parancssorát rendszergazdai jogosultságokkal, és futtassa a Setup.bat a minta telepítési mappából. Ez telepíti a minta futtatásához szükséges összes tanúsítványt.

    Feljegyzés

    A Setup.bat kötegfájl úgy lett kialakítva, hogy a Visual Studio fejlesztői parancssorából fusson. A Visual Studio fejlesztői parancssorában beállított PATH környezeti változó a Setup.bat szkript által igényelt végrehajtható fájlokat tartalmazó könyvtárra mutat.

  2. Indítsa el a Service.exe a service\bin fájlból.

  3. Indítsa el a Client.exe a \client\bin fájlból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.

Ha az ügyfél és a szolgáltatás nem tud kommunikálni, olvassa el a WCF-minták hibaelhárítási Tippek című témakört.

A minta futtatása számítógépeken

  1. Hozzon létre egy könyvtárat a szolgáltatásszámítógépen.

  2. Másolja a szolgáltatásprogram fájljait a \service\bin fájlból a szolgáltatásszámítógép könyvtárába. Másolja a Setup.bat, Cleanup.bat, GetComputerName.vbs és ImportClientCert.bat fájlokat is a szolgáltatásszámítógépre.

  3. Hozzon létre egy könyvtárat az ügyfélszámítógépen az ügyfél bináris fájljaihoz.

  4. Másolja az ügyfélprogram fájljait az ügyfélszámítógép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.bat és ImportServiceCert.bat fájlokat is az ügyfélbe.

  5. Futtassa setup.bat service a kiszolgálón a Visual Studio fejlesztői parancssorában, amely rendszergazdai jogosultságokkal van megnyitva.

    Az argumentummal futtatva setup.batservice létrehoz egy szolgáltatástanúsítványt a számítógép teljes tartománynevével, és exportálja a szolgáltatástanúsítványt egy Service.cer nevű fájlba.

  6. Módosítsa a Service.exe.config fájlt az új tanúsítványnév (a<findValue serviceCertificate> attribútumban) megfelelően, amely megegyezik a számítógép teljes tartománynevével. Módosítsa a szolgáltatás>/<baseAddresses> elem számítógépnevét < is a localhost elemről a szolgáltatásszámítógép teljes nevére.

  7. Másolja a Service.cer fájlt a szolgáltatáskönyvtárból az ügyfélszámítógép ügyfélkönyvtárába.

  8. Az ügyfélen futtassa setup.bat client a Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal megnyitva.

    Az argumentummal futtatva setup.batclient létrehoz egy teszt1 nevű ügyféltanúsítványt, és exportálja az ügyféltanúsítványt egy Client.cer nevű fájlba.

  9. Az ügyfélszámítógép Client.exe.config fájljában módosítsa a végpont címértékét úgy, hogy az megfeleljen a szolgáltatás új címének. Ehhez cserélje le a localhostot a kiszolgáló teljes tartománynevére.

  10. Másolja a Client.cer fájlt az ügyfélkönyvtárból a kiszolgáló szolgáltatáskönyvtárába.

  11. Az ügyfélen futtassa a ImportServiceCert.bat rendszergazdai jogosultságokkal megnyitott Visual Studio fejlesztői parancssorában.

    Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – Megbízható Kapcsolatok tárolóba.

  12. A kiszolgálón futtassa a ImportClientCert.bat a Visual Studio fejlesztői parancssorában, amely rendszergazdai jogosultságokkal van megnyitva.

    Ez importálja az ügyféltanúsítványt a Client.cer fájlból a LocalMachine – Megbízható Kapcsolatok tárolóba.

  13. A kiszolgáló számítógépén indítsa el a Service.exe a parancssori ablakból.

  14. Az ügyfélszámítógépen indítsa el a Client.exe egy parancssori ablakból.

    Ha az ügyfél és a szolgáltatás nem tud kommunikálni, olvassa el a WCF-minták hibaelhárítási Tippek című témakört.

Tisztítás a minta után

A minta utáni tisztításhoz futtassa a Cleanup.bat a mintamappában, amikor befejezte a minta futtatását. Ezzel eltávolítja a kiszolgáló- és ügyféltanúsítványokat a tanúsítványtárolóból.

Feljegyzés

Ez a szkript nem távolítja el az ügyfél szolgáltatástanúsítványait, amikor a mintát számítógépeken futtatja. Ha olyan WCF-mintákat futtat, amelyek tanúsítványokat használnak a számítógépeken, mindenképpen törölje a CurrentUser – Megbízható Kapcsolatok tárolóban telepített szolgáltatástanúsítványokat. Ehhez használja a következő parancsot: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Például: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.