ConcurrencyMode.Mehrere in stateless WCF-Dienste

Wir haben derzeit mehrere WCF-Dienste, die über die Standard -ServiceBehavior. Aufgrund von Problemen mit der Skalierbarkeit, wir sind Blick auf die Anwendung des ConcurrencyMode = ConcurrencyMode.Multiple - Attribut, um den Durchsatz zu steigern. Alle unsere service-Aufrufe sind völlig staatenlos, zum Beispiel:

PersonService.cs:

public class PersonService : IPersonService
{
  public GetPersonResponse GetPerson(GetPersonRequest request)
  {
    GetPersonResponse response = new GetPersonResponse();

    try
    {
      response.Person = Person.GetPerson(request.PersonID);

      return response;
    }
    catch (Exception ex)
    {
      return (GetPersonResponse) response.SetException(ex);
    }
  }
}

Person.cs:

public static class Person
{
  public static PersonDataContract GetPerson(int personID)
  {
    PersonDataContract pdc = null;

    //load contract from db...
    pdc = Database.Load<PersonDataContract>(personID);

    //Address is another static class in the same pattern as Person
    pdc.Addresses = Address.GetAddressesForPerson(personID);

    return pdc;
  }
}

Alle Methoden in der Person - Klasse sind statisch zu helfen, die Leistung und die Staatenlosen für thread-Sicherheit. Die Database Klasse ist auch statisch, aber Ihre Methoden-Referenz-statische Variablen.

In diesem Zusammenhang, was gemacht werden muß thread-sicher, um für ConcurrencyMode.Multiple nicht dazu führen, multithreading-Probleme? Ich denke nur die Database Klasse, aber macht das Person Klasse (und alle anderen Klassen, die dem gleichen Muster Folgen) gesperrt werden müssen, wie gut?

Ich weiß, dass alle Klassen sollte bulletproofed für maximale Sicherheit, aber leider Zeitmangel nicht erlauben, dass diese... die wir brauchen, um code geliefert so bald wie möglich.

InformationsquelleAutor Ian Kemp | 2010-12-23
Schreibe einen Kommentar