Although lots of IoT (Internet of Things) applications have been developed, the systematic method to construct IoT services is still obscure. In this paper, an Event-driven Service-oriented Architecture (EDSOA) for IoT services is discussed, where distributed events act as a primary mechanism for each IoT service to share independent meaningful events, to express its requirements and capabilities, and to decouple itself from other services. Such distributed events however do not provide powerful expressiveness to describe business logic in SOA because business activities are not completely independent each other. To fill the gap, we propose an information-centric session mechanism to describe service behavior working upon distributed events, called event session. Based on the event session concept, a graphical modeling method is proposed to describe IoT business processes. This paper also discusses how to build an Event-driven SOA infrastructure, where we can use resource information to create IoT services, use independent and shared events to run the IoT services, and use event session to coordinate the IoT services. Some applications and experiments are given to show concept proof for such event-driven SOA.