3.7.4.2 FindServiceLocationsForUser Operation

Depending on the deployment topology of the servers in the network, different servers can be used for different functions for a given user. The client SHOULD<46> use the FindServiceLocationsForUser request to discover the appropriate server for various services for a given user, however, the client can obtain service discovery locations in any suitable, implementation-dependent manner. The client can also cache the service discovery location in an implementation-specific manner. A cached service location takes precedence over a service location obtained through the FindServiceLocationsForUser request.

FindServiceLocationsForUser message sequence

Figure 15: FindServiceLocationsForUser message sequence

 <wsdl:operation name="FindServiceLocationsForUser"> 
     <wsdl:input message="tns:FindServiceLocationsForUserSoapIn" /> 
     <wsdl:output message="tns:FindServiceLocationsForUserSoapOut" />
 </wsdl:operation>

In the FindServiceLocationsForUser operation, the client MUST authenticate,<47> identify a service type, and request its location. A properly formed FindServiceLocationsForUser request MUST contain a valid ServiceType. If the ServiceType is improperly formed, the server returns a System.InvalidOperationException fault code.

Upon receiving a FindServiceLocationsForUser request, the server SHOULD service the request. To service the request, the server SHOULD begin by accessing the RequestContext provided by the HTTP server. If the isAuthenticated field of the RequestContext is false, the server SHOULD return a Microsoft.DigitalRightsManagement.Utilities.UnspecifiedErrorException SOAP fault. If the authenticationType field of the RequestContext is MWBF, the Directory to use for servicing the request is the directory the server is located in. Otherwise, the server SHOULD invoke the GetDirectoryForAccount abstract interface, passing in the authenticatedAccount field of the RequestContext, to determine the Directory corresponding to the DomainAccount. If GetDirectoryForAccount returns NULL, the server SHOULD return a Microsoft.DigitalRightsManagement.Utilities.UnspecifiedErrorException SOAP fault. If the server is in a different Directory than the DomainAccount, the server SHOULD invoke the GetServiceLocationForDirectory abstract interface, passing in the Directory and the requested ServiceType, to determine the service location for the requested ServiceType in the Directory of the authenticated DomainAccount. Otherwise the server SHOULD determine the service location based on its configuration, returning values of various ADM elements specified in section 3.1.1.1.1 as follows: If the client requests the CertificationService, the server SHOULD use the value of the externalCertificationUrl field of ServerState. If the client requests the LicensingInternalService, the server SHOULD use the value of the licensingUrl field of ServerState. If the client requests LicensingService, the server SHOULD use the value of the externalLicensingUrl field of ServerState. If the client requests the ActivationService or CertificationInternalService, the server SHOULD use the corresponding endpoint URLs specified in section 3.1.4.2. For a successful request, the server MUST return the appropriate service location as a URL. This URL SHOULD be set to null for a successful request if the service does not exist. For an unsuccessful request, the server MUST return a SOAP fault code. The client MUST treat all SOAP fault codes the same.

The client MUST use one of the following types in the ServiceType enumeration:

  • ActivationService (version 1.0 clients only)

  • CertificationInternalService

  • CertificationService

  • LicensingService

  • LicensingInternalService