WCF Transaction Configuration Steps

Step 1) Contact được thiết lập thuộc tính:

[ServiceContract]
public interface IService1
{
[OperationContract, TransactionFlow(TransactionFlowOption.Mandatory)]
bool PerformCreditTransaction(string creditAccountID, double amount);

Step 2)
Lớp cài đặt dịch vụ được thiết lập như sau:

[OperationBehavior(TransactionScopeRequired = true)]
public bool PerformCreditTransaction(string creditAccountID, double amount)

Step 3) cấu hình web.config

<services>
<service name=”WcfServiceTransaction.Service1″ behaviorConfiguration=”WcfServiceTransaction.Service1Behavior”>
<endpoint address=”” binding=”wsHttpBinding” contract=”WcfServiceTransaction.IService1″ bindingConfiguration=”httpBinding”>
<identity>
<dns value=”localhost”/>
</identity>
</endpoint>
<endpoint address=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange”/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name=”httpBinding” transactionFlow=”true”/>
</wsHttpBinding>
</bindings>

Step 4) Client

Sử dụng TransactionScope và ts.Complete()

WCF Transaction

Introduction

In this article we will discuss about creating transaction enabled WCF service. We will see what needs to be done on the WCF service end so that it support transactions. We will also see how a client application can work with thesetransaction enabled services using a sample application.

Background

When we talk about transactions in database operations, we need to perform some operation(database operations) in such a way that either all the operations are successful or all of them fail. This would result in the amount information being same once the transaction is successful or it fails.

Properties of Transaction

By definition a transaction must be Atomic, Consistent, Isolated and Durable. What does we mean by all these terms

  • Atomic: Atomic means that all the statements (SQL statement or operations) that are a part of the transactionshould work as atomic operation i.e. either all are successful or all should fail.
  • Consistent: This means that in case the atomic transaction success, the database should be in a state that reflect changes. If the transaction fails then database should be exactly like it was when the transactionstarted.
  • Isolated: If more than one transactions are in process then each of these transactions should work independently and should not effect the other transactions.
  • Durable: Durability means that once the transaction is committed, the changes should be permanent i.e. these changes will get saved in database and should persist no matter what(like power failure or something).

Now having transactions from a simple class library’s perspective ot from a simple .Net applications, it is just a matter of calling the operations within a transaction, checking whether all the operations are successful or not and deciding whether to commit or rollback the transaction. Refer this article to know about transactions in normal application: A Beginner’s Tutorial for Understanding Transactions and TransactionScope in ADO.NET[^]

But from a WCF service perspective, since the service itself may be running on a remote server and all the communication between the service and the client is in form of messages, the service itself need some configuration so that it can be made transaction enabled.

Now in rest of the article we will see how we can configure a WCF service to support transactions and how we can call a WCF operation within transactions.

Using the code

Understanding Two Phase Commit

The WCF transactions happen using two phase commit protocol. Two phase commit protocol is the protocol that is used to enable transactions in a distributed environment. This protocol mainly consist of two phases:

  • Prepare phase: In this phase the client application performs the operations of a WCF service. WCF service determines whether the requested operation will be successful or not and notify the client about the same.
  • Commit Phase: In the commit phase the client checks for the responses it got from the prepare phase and if all the responses are indicating that the operation can be carried out successfully the transaction is committed. If the response from any one of the operations indicates failure then the transaction will be rolled back. The actual operation on the service end will happen in the commit phase.

Now from the protocol, it is pretty clear that the WCF service will have to send the notification of whether the operation will succeed or fail to the client application. It would mean that the One way operations can never supporttransactions. The operations that support transactions have to follow the Request-Response Model(refer this for details on message exchange modes: Tutorial on Message Exchange Patterns and Asynchronous Operations inWCF[^])

A note on binding

Since services communicate in form of messages the underlying message specifications play a very important role in supporting transactions. To have the possibility of transactions, the WS-AT(WS-AtomicTransaction) protocol need to be used. The binding that supports this is wsHttpBinding. So we will be using this binding to create our transaction enabled service.

Description of the Test Application

To illustrate the above process, let say I have two account holders, one person is trying to transfer some money to other person. From the database perspective this operation consist of two sub-operations i.e.

  • Debiting the first account by specified amount.
  • Secondly, crediting the second account with required amount.

Now from a technical perspective, if the first operation is successful but second one fails the result would be that the first persons account will be debited but second one will not be credited i.e. we loose the amount of information. The other way round will in fact increase the amount ion second account without even debiting the first amount.

So the bottom-line here is that we need either both of them to be successful to both of them should fail. Success of any one operation will result in inconsistent results and thus even if one operation fails we need to rollback what we did in the other operation. This is precisely where transaction are useful.

Let us say that the operations for credit and debit are exposed separately from a service. What we need to do is that, we need to transaction enable this service and then call these two methods within a transaction. The transactionwill be committed only when both the operation indicate success. In case any one operation indicates failure or throws an exception, the transaction will not be committed.

Creating the Service

Let us create a simple service with a ServiceContract that exposes operations to debit an account, credit an account and get the account balance information for any account.

 Collapse | Copy Code
[ServiceContract]
public interface IService1
{
    [OperationContract]
    bool PerformCreditTransaction(string creditAccountID, double amount);

    [OperationContract]
    bool PerformDebitTransaction(string debitAccountID, double amount);

    [OperationContract]
    decimal GetAccountDetails(int id);
}

Now we want the operations PerformCreditTransaction and PerformDebitTransaction to work within atransaction. To do this we need to make some configuration in the service. The very first thing that is required with the OperationContract is to set the TransactionFlow property with the desired TransactionFlowOption. There are 3 possible values for TransactionFlowOption:

  • Mandatory: This specifies that this function can only be called within a transaction.
  • Allowed: This specifies that this operation can be called within a transaction but its not mandatory.
  • NotAllowed: This specifies that this operation can not be called within a transaction.

Now for both our operations, we want the operations to be called mandatory within a transaction so we will specify them with this option.

 Collapse | Copy Code
[ServiceContract]
public interface IService1
{
    [OperationContract, TransactionFlow(TransactionFlowOption.Mandatory)]
    bool PerformCreditTransaction(string creditAccountID, double amount);

    [OperationContract, TransactionFlow(TransactionFlowOption.Mandatory)]
    bool PerformDebitTransaction(string debitAccountID, double amount);

    [OperationContract]
    decimal GetAccountDetails(int id);
}

Now to illustrate the implementation part, We will work on a small application that contains a single table database. This table contains the account id and the amount present in the account.

The sample DB table looks like:

The UI will look like:

And now to perform these operations, we will write simple ADO.NET code in our service implementation. The important thing from the service implementation perspective is that the service implementation also needs to be decorated/adorned with OperationBehavior attribute with TransactionScopeRequired property set to true. So now let us look at the sample implementation of the service operations.

 Collapse | Copy Code
public class Service1 : IService1
{
    readonly string CONNECTION_STRING = ConfigurationManager.ConnectionStrings["SampleDbConnectionString1"].ConnectionString;

    [OperationBehavior(TransactionScopeRequired = true)]
    public bool PerformCreditTransaction(string creditAccountID, double amount)
    {
        bool creditResult = false;

        try
        {
            using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
            {
                con.Open();

                // And now do a credit
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = string.Format(
                        "update Account set Amount = Amount + {0} where ID = {1}",
                        amount, creditAccountID);

                    // Let us emulate some failure here to see the that transaction will not
                    // get committed
                    // return false;

                    creditResult = cmd.ExecuteNonQuery() == 1;
                }
            }
        }
        catch
        {
            throw new FaultException("Something went wring during credit");
        }
        return creditResult;
    }

    [OperationBehavior(TransactionScopeRequired = true)]
    public bool PerformDebitTransaction(string debitAccountID, double amount)
    {
        bool debitResult = false;

        try
        {
            using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
            {
                con.Open();

                // Let us do a debit
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = string.Format(
                        "update Account set Amount = Amount - {0} where ID = {1}",
                        amount, debitAccountID);

                    debitResult = cmd.ExecuteNonQuery() == 1;
                }
            }
        }
        catch
        {
            throw new FaultException("Something went wring during debit");
        }
        return debitResult;
    }

    public decimal GetAccountDetails(int id)
    {
        decimal? result = null;

        using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
        {
            using (SqlCommand cmd = con.CreateCommand())
            {
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = string.Format("select Amount from Account where ID = {0}", id);

                try
                {
                    con.Open();
                    result = cmd.ExecuteScalar() as decimal?;
                }
                catch (Exception ex)
                {
                    throw new FaultException(ex.Message);
                }
            }
        }

        if (result.HasValue)
        {
            return result.Value;
        }
        else
        {
            throw new FaultException("Unable to retrieve the amount");
        }
    }
}

Note: The code is written to elaborate the transaction enabled services only, it is not as per the coding standards i.e it is vulnerable to SQL injection. It should not be taken as code that could go in production. It is just the sample code and has a lot of scope for improvement.

Now we have our ServiceContract ready and service implementation ready. Let us now use the appropriate binding i.e. wsHttpBinding to use this service. Also, in the service configuration we need to specify that this service is transaction enabled. This can be done by setting the transactionFlow property of the binding configuration ofwsHttpBiding to true

Note: Please refer the web.config of the sample code to see how this is done.

Test Application

From our test application, we will simply call the functions within a transaction(using TransactionScope). We will check both the operations’ return value, if both of the indicates success, we will commit the transaction(by calling Complete method on TransactionScope object). If any operation fails we will rollback the transaction by not calling Complete function and simply letting the TransactionScope object go out of scope).

 Collapse | Copy Code
private void PerformTransaction(string creditAccountID, string debitAccountID, double amount)
{
    // they will be used to decide whether to commit or rollback the transaction
    bool debitResult = false;
    bool creditResult = false;

    try
    {
        using (TransactionScope ts = new TransactionScope())
        {
            using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
            {
                debitResult = client.PerformDebitTransaction(debitAccountID, amount);
                creditResult = client.PerformCreditTransaction(creditAccountID, amount);
            }

            if (debitResult && creditResult)
            {
                // To commit the transaction 
                ts.Complete();
            }
        }
    }
    catch
    {
        // the transaction scope will take care of rolling back
    }
}

The code currently will work fine i.e. both the methods will return true and the transaction will get committed. To check the rollback action, we have a simple return false; statement commented in our service’sPerformCreditTransaction operation, un-comment this statement to check that the transaction will not get committed.

Note: The code snippets shows the relevant code in the context. Please look at the sample code to get the full understanding.

So now we have a service that supports transactions. Before wrapping up let is look at the main operations we need in order to make a service transaction enabled.

  1. Decorate the OperationContract with required TransactionFlowOption.
  2. Decorate the operation implementation with OperationBehavior with TransactionScopeRequired as true.
  3. Use wsHttpBinding to utilize the underlying WS-AtomicTransaction protocol.
  4. Specify the transactionFlow property of the binding configuration of wsHttpBinding as true.

Source: codeproject.com

WCF Binding types

This article offers a brief explanation on the basic concepts of the Communication part in the Windows Communication Foundation – WCF. To further illustrate the concepts, the article provides examples of configuration settings in the service’s web.config file and the client code.

In order to communicate with a WCF service, the client needs to know simple details like ABC of the service.

The ABC of Windows Communication Foundation!!!

Before we learn the ABC of WCF, we need to know how a WCF service is made accessible to the clients.

A WCF service allows communication through an Endpoint. And the endpoint is the only point of communication of the WCF service that enables message exchange with the client as shown in Figure 1.

Figure 1

And this Endpoint needs to set the ABC attributes of the WCF service as shown in Figure 2.

Figure 2

Thus in the WCF world, ABC is an abbreviation of Address, Binding and Contract attributes of an Endpoint.

An example of the Endpoint

Let us quickly run through an example of an endpoint setting in the web.config file at the service side.

<!– Endpoint settings in WCF service –>
<endpoint address=”http://localhost:8731/EmployeeWCFService.ServiceImplementation.Manager/
binding=”basicHttpBinding”
contract=”EmployeeWCFService.ServiceContract.IEmployee” />

Where, address is the network address of the service, binding specifies transport protocol (HTTP, TCP, etc.) selected for the service and contract is the interface the service implements.

For the purpose of this article, we are going to emphasize on the Binding part of the WCF communication mechanism.

So, what is the Binding?

The Binding is an attribute of an endpoint and it lets you configure transport protocol, encoding and security requirements as shown in Figure 3

Figure 3

Types of Binding

One of the design goals of WCF is to unify the way distributed systems are developed prior to release of .Net Framework 3.0. WCF offers a single development framework for all scenarios where distributed solutions were implemented using different technologies such as ASMX web services, .Net Remoting, COM+, etc. WCF achieves this by configuring binding attributes of an endpoint. WCF lets you choose HTTP or TCP transport protocol, encoding, etc. just by tweaking the value of binding attribute for an endpoint.

To cater to different transport protocols, WCF lets you select HTTP, TCP and MSMQ binding types. For the purpose of this article, we are going to concentrate on HTTP and TCP binding with a concise explanation and simple example settings.

basicHttpBinding

This type of binding exists in new .Net world only to support backward compatibility with ASMX based clients (WS-Basic Profile 1.1). Basic http binding sends SOAP 1.1 messages and is used when there is a requirement for the WCF services to communicate with non WCF based systems. Thus, providing an endpoint with basicHttpBinding makes interoperating with other basic implementations of web services a great choice.

Note: All other bindings except basicHttpBinding support WS* specifications including security, reliable messaging and transaction support, where appropriate.

How to setup the basicHttpBinding?

Let us examine how to setup binding for an endpoint in the web.config file.

Step 1: Choose basicHttpBinding as a value in the binding attribute of an endpoint.

<endpoint
address=”http://localhost:8731/EmployeeWCFService.ServiceImplementation.Manager/
binding=”basicHttpBinding”
bindingConfiguration=”basicBinding”
contract=” EmployeeWCFService.ServiceContract.IEmployee”>

Step 2: This step is optional and is only required if the binding’s default properties need to be modified, as shown in the example below. In this case, name the binding same as bindingConfiguration attribute in the endpoint section.

<bindings>|
<basicHttpBinding>
<binding    name=”basicBinding”
textEncoding=”utf-8″
openTimeout=”00:03:00″
closeTimeout=”00:03:00″
/>

</basicHttpBinding>
</bindings>

Note: All other types of binding are setup in the same way.

wsHttpBinding

This binding sends SOAP 1.2 messages and implements WS* specifications to support enterprise requirements of security, reliability, ordered delivery and transaction management.

netTcpBinding

This binding sends SOAP 1.2 messages, provides binary encoding and optimized communication between WCF services and WCF clients on Windows network. This binding is the fastest binding amongst all WCF binding options between different nodes in the TCP network. Unlike http bindings, the TCP binding does not offer interoperability but is highly optimized for .Net 3.0 and above clients. Thus, in .Net version 3.0 and above, providing an endpoint with netTcpBinding is an easy option to development of distributed systems and can replace COM+ and .Net Remoting model.

netNamedPipeBinding

This binding is used to provide secure and reliable Named Pipe based communication between WCF services and WCF client on the same machine. It is the ideal choice for communication between processes on the same machine.

netPeerTcpBinding

This type of binding exists to cater peer-to-peer computing using WCF services.

For more information on PNRP visit Microsoft page Peer Name Resolution Protocol

How to setup the netPeerTcpBinding?

Let us examine how to setup netPeerTcpBinding for an endpoint in the web.config file.

Step 1: Before peer-to-peer binding can be used, make sure you have Peer Name Resolution Protocol installed on your machine. To enable PNRP on your Windows XP SP2 and above, take following steps:

  • Go to Add or Remove Programs in the Control Panel
  • Select Add/Remove Windows Components option
  • Select Networking Services from the list of Components and click Details button
  • Select Peer-to-Peer option from the list, as shown in the screenshot, and click the OK buttonAdditionally, you can also make sure that the PNRP and its dependent services are started as follows:

Step 2: Choose netPeerTcpBinding as a value in the binding attribute of an endpoint.

<endpoint
address=”net.p2p://localhost/MemberWCFService.ServiceImplementation.Member/”
binding=”netPeerTcpBinding”
bindingConfiguration=”netp2pBinding”
contract=”MemberWCFService.ServiceContract.IMember”>

Step 3: To configure the binding as shown in the example below.

<bindings>
<netPeerTcpBinding>
<binding name=”netP2P” >
<resolver mode=”Pnrp” />
<security mode=”None” />
</binding>
</netPeerTcpBinding>
</bindings>

Thumb rules in choosing endpoint’ binding

  • If you require your service to be consumed by clients compatible with SOAP 1.1, use basicHttpBinding for interoperability
  • If you require your service to be consumed within the corporate network, use netTCPBinding for performance
  • If you require your service to be consumed over the internet and the client is a WCF compatible, use wsHttpBinding to reap full benefits of WS* specifications
  • If you require your service to be accessible only in the same machine, use netNamedPipeBinding
  • If you require your service to be queue messages, use netMsmqBinding
  • If you require your service to act as server as well as client in a peer to peer environment, utilise netPeerTcpBinding setting

Binding configuration summary

Following table shows parameters such as security, transport protocol, encoding and hosting environment choices available with different binding for a WCF service. This summary should help choose an appropriate binding for your project environment.

Binding Security
Default Configurable
Transport Protocol Encoding
Default Other
Host
basicHttpBinding None,
Transport, Message, Mixed
HTTP Text/XML, MTOM IIS, WAS
wsHttpBinding Message, Transport, Mixed HTTP Text/XML, MTOM IIS, WAS
netTcpBinding Transport, Message, Mixed TCP Binary WAS
netNamedPipeBinding Transport,None Named Pipe Binary WAS
netMsmqBinding Message, Transport, None TCP Binary WAS
netPeerTcpBinding Transport P2P Binary

FAQ about an Endpoint

Can I have multiple

FAQ about an Endpoint

Can I have multiple endpoints for a WCF service?
Answer: Yes

Can I have multiple endpoints of the same binding type e.g. multiple endpoints of basicHttpBinding?
Answer: Yes

Can I have multiple endpoints of different binding types to serve different types of clients e.g. an endpoint with basicHttpBinding, an endpoint with wsHttpBinding and an endpoint with netTcpBinging?
Answer: Yes

 

Source: c-sharpcorner.com

Nhiều web.sitemap trong web site

1. Cấu hình web.config

<siteMap defaultProvider=”AspNetXmlSiteMapProvider” enabled=”true”>
<providers>
<add name=”AdminSiteMapProvider”
description=”The site map provider that reads in the Admin.sitemap XML files.”
type=”System.Web.XmlSiteMapProvider”
siteMapFile=”~/MasterPages/Web.Sitemap”/>
</providers>
</siteMap>

2. Chỉ ra sitemapProvider trong SiteMapDataSource

<asp:SiteMapDataSource ID=”SiteMapDataSource1″ ShowStartingNode=”false” runat=”server” SiteMapProvider=”AdminSiteMapProvider” />

Cơ bản về màu sắc

Màu sắc ngoài cái đẹp trời cho còn có một chiều sâu kín đáo, chính cái điều kỳ diệu ấy làm rung động lòng người. Tất nhiên không phải lúc nào màu sắc cũng đẹp, không phải lúc nào màu sắc cũng hài hoà.
Màu sắc luôn tác động đến cuộc sống của chúng ta.

Màu sắc là hiện tượng vật lý mà mắt chúng ta thấy được.

Màu sắc có ngôn ngữ riêng của nó mà chúng ta phải tự cảm nhận.

Màu sắc có sức mạnh làm tâm hồn chúng ta rung động.

Người ta có thể dùng nghệ thuật phối màu để nói lên ý tưởng của mình mà không cần đến lời nói hay câu văn.

Màu sắc ngoài cái đẹp trời cho còn có một chiều sâu kín đáo, chính cái điều kỳ diệu ấy làm rung động lòng người. Tất nhiên không phải lúc nào màu sắc cũng đẹp, không phải lúc nào màu sắc cũng hài hoà.

Vì vậy nghệ thuật phối màu sẽ bù đắp những khuyết điểm đó.

Tóm tắt những khái niệm

Màu dương tính:


Màu được tạo ra từ một nguồn sáng. Ví dụ: khi những màu cơ bản: Đỏ; Xanh lá cây và Xanh da trời phối hợp với nhau sẽ tạo ra màu trắng.

Màu âm tính:


Là màu được xác định bởi sự hấp thu ánh sáng. Ví dụ: khi màu Xanh lục, Đỏ cánh sen và Vàng được phối hợp chúng sẽ tạo ra màu nâu đen.

Nếu bạn phối những màu dương tính cơ bản bạn sẽ được những màu âm tính cơ bản và ngược lại.

Hiểu được mối quan hệ đối nghịch này trong màu sắc rất cần thiết khi phải xác định và chỉnh sửa những trục trặc về màu sắc.

Ví dụ: Nếu một hình ảnh quá xanh, bạn có 2 cách để tiếp cận vấn đề: Hoặc tăng thêm màu vàng vốn là màu đối nghịch với xanh da trời nhằm làm trung hoà màu xanh da trời. Hoặc giảm bớt màu xanh da trời trong hình ảnh. Cả 2 cách đều đi đến cùng một kết quả là giảm bớt được màu xanh.
Vòng tròn màu căn bản (the color wheel)

Vòng tròn màu căn bản có 12 cung chia đều theo hình nan quạt trên diện tích hình tròn, mỗi cung có 8 cấp độ màu đi dần vào tâm vòng tròn từ đậm đến nhạt. 12 cung x 8 cấp độ sẽ tạo ra 106 màu căn bản và được đánh số từ 1 đến 106 đó cũng là kí hiệu khi ta chọn màu . Ví dụ: Số 1 là màu đỏ sậm nhất (C:0 – M:100 – Y:100 – K:45) số 36 là màu vàng tươi (C:0 – M:0 – Y:100 – K:0) số 84 (C:80 – M:100 – Y:0 – K:0) là màu tím rượu nếp than (híc nghe mà…thèm) số 68 (C:100 – M:60 – Y:0 – K:0) là màu xanh nước biển…

Vòng tròn màu căn bản được tạo ra từ 3 màu: Đỏ – Vàng – Lục lam. Từ ba màu này, màu sắc được pha lẫn hai màu với nhau ( ví dụ: Đỏ + Vàng = Da cam) rồi ba màu trộn lại với nhau, cứ thế ta sẽ có hơn 3.400 màu thông dụng nhất trong thiết kế đồ hoạ và nếu cứ pha , pha và pha trộn mãi bạn sẽ có hàng ty tỷ sắc màu cho…riêng bạn.

Cách dùng màu:

• Cấp thứ nhất (Primary)

Dùng 3 màu: Đỏ – Vàng – Lục lam để phối ra các sắc độ màu khác nhau.

• Cấp thứ hai (Secondary)

Nếu lấy màu đỏ chồng lên màu vàng sẽ được màu da cam, lấy màu đỏ chồng lên lục lam sẽ có màu tím, lấy màu vàng chồng lên màu lục lam sẽ được màu xanh lá cây…
Cách lấy 2 màu chồng lên nhau để tạo ra màu khác như trên được gọi là màu chồng đơn.

• Cấp thứ ba (Tertiary)

Từ 3 màu căn bản: Đỏ – Vàng – Lục lam chúng ta đã phối ra màu da cam – xanh lá – tím. Nếu chồng các màu ở cấp Primary và Secondary, ta sẽ được các màu ở cấp Tertiary là: Đỏ cam – Vàng cam – Vàng xanh – Xanh lơ – Xanh tím và Đỏ tím.


Không có “cái gọi là” màu đen, màu xám hay màu trắng vì màu trắng chỉ là sắc độ giảm tối đa của một trong 12 màu trên vòng tròn màu, màu xám và đen chính là sắc độ tăng tối đa của những màu trên (quá xá là đúng)

Trình tự phối màu:


• Bước 1: Xác định rõ hiệu ứng màu sắc bạn muốn đạt được.(Hiệu ứng màu sẽ nói ở các phần sau của bài này)

• Bước 2: Chọn 1 màu chính đặc trưng cho chủ đề muốn thể hiện.

• Bước 3: Chọn 1 màu hỗ trợ cho màu chính. Để có thể tìm được màu hỗ trợ một cách nhanh chóng, bạn dùng 2 màu đối diện nhau trong vòng tròn màu căn bản.

Ví dụ: Màu đỏ được chọn là màu chính thì màu hỗ trợ cho nó là màu xanh lá cây. Tương tự như vậy ta có các cặp màu chính và màu hỗ trợ như sau:

Màu Gạch cua – Xanh ve chai.

Da cam – Xanh dương.

Nghệ – Chàm.

Vàng – Tím.

Vàng xanh – Đỏ tím…

Màu chính và màu hỗ trợ có tính năng làm tăng nét rực rỡ, linh động và giúp nhau nổi bật lên.

Ví dụ: Nếu ta đặt cánh hoa vàng trên phông nền tím, hoa vàng sẽ rực rỡ hơn nhờ màu tím làm nền đệm. Nhưng nếu cũng với cách thức ấy, dùng nền màu trắng hay xanh lá thì cánh hoa vàng không nổi bật được.

Nếu đặt mảng màu đỏ tươi cạnh màu xanh lá cây thì cũng có hiệu ứng tương tự.

• Bước 4: Từ màu chính và màu phối hợp chọn ra màu thứ ba hài hoà với 2 màu trước.

07 SẮC CẦU VỒNG

Sắc độ hay tính chất của màu sắc gợi lên ít nhiều xúc động cho người xem. Người ta dùng nhiều từ khác nhau để mô tả đặc tính của màu sắc đơn và so sánh khi chúng phối hợp với nhau.

Tuy nhiên độ sáng và tối lại là điều cơ bản của việc tạo ra sắc độ. Nếu không có ánh sáng thì sẽ chẳng có màu sắc. Tất nhiên, ở trong bóng tối tất cả chỉ là màu đen. Ánh sáng mặt trời là chùm tia sáng có bước sóng khác nhau. Nếu ánh sáng mặt trời chiếu qua lăng kính thì sẽ tạo ra một dải màu. Trong thiên nhiên điều này được thể hiện qua cầu vồng 7 sắc.

Khi ánh sáng chiếu qua 1 vật, bề mặt của nó sẽ nhận bức xạ của bước sóng ánh sáng này và phản chiếu lại bức xạ của ánh sáng khác. Nếu mức hấp thụ bức xạ của các bước sóng đều nhau và mỗi thứ một chút thì chúng ta sẽ thấy vật ấy màu trắng. Ngược lại, nếu nó hấp thu toàn bộ bức xạ thì chúng ta sẽ thấy vật ấy màu đen.

Vậy màu sắc thấy được trên một sự vật là sự tổng hợp bức xạ ánh sáng mà bề mặt của nó phản chiếu.

Cùng một vật thể, nếu chụp hình ở dưới ánh sáng tự nhiên sẽ có sắc màu khác khi chụp dưới ánh sáng nhân tạo. Cũng vậy, khi soi một tờ in màu dưới ánh sáng tự nhiên thì màu sắc của hình ảnh sẽ khác khi soi tờ in dưới ánh sáng nhân tạo.

Màu sắc được phân thành 8 loại:

– Màu nóng (Hot)

– Màu lạnh (Cold)

– Màu ấm (Warm)

– Màu mát (Cool)

– Màu sáng (Light)

– Màu sậm (dark)

– Màu nhạt (Pale)

– Màu tươi (Bright)

Như đã nói ở phần đầu do không có hình minh hoạ giống như trong sách, nên các hình ảnh TNDH minh hoạ dưới đây có thể sẽ không phản ánh chính xác nội dung của từng màu. Một số màu chưa tìm được hình, mong các bạn xem nội dung và tìm kiếm giúp.

Màu nóng: Màu nóng là màu đỏ bão hoà trên vòng tròn màu, đó là màu đỏ cờ được pha bởi màu magenta và yellow.

Màu nóng tự nó phản chiếu và lôi cuốn sự chú ý. Vì vậy màu đỏ thường dùng trong thiết kế khi muốn gây sự chú ý.

Màu nóng có ảnh hưởng mạnh mẽ, làm tác động đến không gian chung quanh nó.

Màu lạnh: Màu lạnh là mầu thuần xanh biển. Nó toả sáng và tươi sáng hẳn lên.

Màu lạnh làm chúng ta thấy mát như đang gần một tảng đá hay trên tuyết.

Màu lạnh làm người xem có cảm giác mát mẻ, nhẹ nhàng.

Màu lạnh có tính đối lập với màu nóng.

Khi chuyển dần từ màu nóng sang màu lạnh, chúng ta có cảm giác như đang đứng bên lò lửa được chuyển sang cạnh một tảng băng, thật dễ chịu (?!)

Màu ấm: Trong màu ấm luôn có sự hiện diện của màu đỏ.

Màu ấm được tạo ra do sự phối hợp giữa màu đỏ và màu vàng.

Tùy theo mức độ pha giữa màu đỏ và màu vàng mà chúng ta có những dạng màu ấm khác

nhau.

Ví dụ: màu đỏ cam; màu cam; màu vàng cam …Màu ấm như thân thiện, đón chào người xem. Nhìn màu ấm giống như chúng ta đang ngắm cảnh đẹp của mặt trời bình minh hoặc hoàng hôn.

Màu mát: Màu mát được tạo ra trên nền màu xanh.

Nó không giống như màu lạnh bởi vì được phối với màu vàng.

Một số dạng màu mát như : vàng xanh; xanh lá cây; lục lam…

Dạng màu xanh ngọc và xanh lá cây luôn có trong tự nhiên.

Màu mát làm chúng ta thấy nhẹ nhàng như đang trong mùa đâm chồi nẩy lộc của mùa xuân.

Màu mát luôn nhẹ nhàng, tươi mát và sâu lắng.

Màu mát giống như một thác nước làm dịu mắt người xem.

Màu sáng: Màu sáng là màu của thủy tinh, của cây tùng lam.

Màu sáng có tính nhẹ nhàng trong sáng.

Màu sáng được tạo ra từ màu đỏ pha với lục lam đi kèm với vàng nhạt.

Tuy nhiên sắc thái màu phải trong. Khi độ trong của màu tăng thì mức độ thay đổi sắc độ màu giảm.

Màu sáng làm chúng ta thấy tâm hồn trở nên thoải mái, thư thái và buông lỏng.

Màu sáng giống như màn cửa sổ hé ra để ánh nắng ban mai lùa vào phòng.

Màu sậm: Màu sậm là màu chứa màu đen trong khi phối màu.

Màu sậm làm khoảng không gian như thu nhỏ lại và làm vật thể như nhỏ hơn.

Màu sậm làm tăng tính nghiêm trang, đứng đắn.

Thật vậy màu sậm ẩn khuất như khung cảnh của mùa thu và mùa đông ảm đạm.

Phối hợp giữa màu sáng và màu sậm sẽ gây nên một ấn tượng sâu sắc, mạnh mẽ. Nó tiêu biểu cho sự đối lập của tự nhiên, sự tương phản nhưng cần thiết giữa ngày và đêm.

Màu nhạt: Màu nhạt là màu tùng lam thật nhẹ.

Sắc màu nhợt nhạt, nó chứa ít nhất 65% màu trắng.

Màu nhạt tạo nên vẻ mềm mại, lãng mạn và lơ đãng.

Màu nhạt thường dùng như màu ngà, tùng lam sáng và hồng tối nhạt.

Nguồn: thegioiweb

Màu nhạt tạo cho người xem một cảm giác như ngắm đám mây nhẹ trôi hoặc như nắng nhẹ ban mai hoặc êm đềm như một sáng mờ sương.

Vì màu nhạt là màu trang nhã nên thường được dùng trong trang trí nội thất.

Màu tươi: Màu tươi là tổng hợp tinh khiết của màu sắc.

Sự tươi thắm của màu sắc được tạo ra bằng cách bỏ qua thang xám và đen.

Trong màu tươi chứa các sắc màu xanh; đỏ; vàng và cam.

Màu tươi chói lọi và sặc sỡ, nó gây nên sự chú ý.

Một chiếc xe màu vàng tươi, một chùm bong bóng rực rỡ hoặc cái mũi tươi thắm của chú hề … là những sắc màu không bao giờ bị quên lãng.

Màu sắc tươi tạo ra nét phấn khởi, vui tươi luôn được ngành thời trang và quảng cáo chú ý.