Showing posts with label C#. Show all posts
Showing posts with label C#. Show all posts

4/1/12

Làm việc với Thread Local Storage (TLS) trong C#

 Tên bài viết: Làm việc với Thread Local Storage (TLS) trong C#
Tác giả: Quang IT
Cấp độ bài viết: Chưa đánh giá
Tóm Tắt
Thread-local storage (TLS) là một phương thức lập trình trên máy tính sử dụng bộ nhớ tĩnh hoặc địa phương(global) đến thread. Tất cả các giá trị của tiến trình chia sẻ không gian địa chỉ ảo của tiến trình này. Các biến địa phương của một chức năng duy nhất cho mỗi thread chạy chức năng này.
Bookmark and Share

8/29/11

Lấy dữ liệu từ Table thông qua dataset để hiển thị trên dataGridView

Tên bài viết: Lấy dữ liệu từ Table thông qua dataset để hiển thị trên dataGridView
Tác giả: Quang.It
Cấp độ bài viết: Cơ bản
Tóm tắt: Lấy dữ liệu từ Table thông qua dataset để hiển thị trên dataGridView
--------------------------------------------------------------------------------
DataSet
Là thành phần chính của kiến trúc không kết nối cơ sở dữ liệu, được dùng để nắm giữ dữ liệu của mọi cơ sở dữ liệu và cho phép thay đổi dữ liệu bên trong đối tượng này để sau đó cập nhật trở lại cơ sở dữ liệu nguồn bằng phương thức Update của đối tượng DataAdapter
Khởi tạo
Bookmark and Share

Tìm hiểu và nghiên cứu sử dụng LINQ(hỗ trợ MS-SQL)

Tên bài viết: Hướng dẫn sử dụng LINQ
Tác giả: Quang.It
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Hướng dẫn chi tiết cách sử dụng LINQ từ select, insert, delete cả bảng đến từng hàng, cập nhật(Update)
------------------------------------------------------------------------------------------
Giới thiệu:


LINQ là công nghệ mới mà microsoft trình làng trong visual 2008.
LINQ là 1 bước tiến mới trong cách thức truy xuất và làm việc với XML, database(mới chỉ hỗ trợ MS-SQL), và Object dựa trên 1 cú pháp duy nhất, các câu lệnh LINQ gần tương tự câu lệnh SQL.
Sau đây mình xin giới thiệu các bước cơ bản để tạo 1 ứng dụng LINQ to SQL
Đầu tiên các bạn tạo 1 application như sau (bao gồm Form và 1 DataGridView có name là Products):
Bookmark and Share

Loại bỏ hết các thẻ HTML trong chuỗi

public static string StripAllTags(string input)
{
char[] array = new char[input.Length];
int arrayIndex = 0;
bool inside = false;

for (int i = 0; i < input.Length; i++)
{
char let = input[i];
if (let == '<')
{
inside = true;
continue;
}

if (let == '>')
{
inside = false;
continue;
}
if (!inside)
{
array[arrayIndex] = let;
arrayIndex++;
}
}

return new string(array, 0, arrayIndex);
}
Bookmark and Share

Sự khác biệt giữa C# và VB.NET

Sự khác biệt giữa VB.NET và C# được thể hiện ở ba phần chính: cú pháp, các nguyên lý hướng đối tượng, và môi trường phát triển tích hợp Visual Studio .NET. Sự khác biệt về cú pháp liên quan đến các câu lệnh và các yếu tố ngôn ngữ. Sự khác biệt về hướng đối tượng thì khó thấy hơn, liên quan đến bản hiện thực và tính năng giữa hai ngôn ngữ. Sự khác biệt về môi trường phát triển tích hợp bao gồm những thiết lập biên dịch (là những đặc tính được thiết lập thông qua IDE, có tác dụng khác nhau tùy vào ngôn ngữ). Cũng có sự khác biệt thứ tư liên quan đến các tính năng ngôn ngữ có trong ngôn ngữ này nhưng không có trong ngôn ngữ kia.

Bookmark and Share

Upload and Show PDF in Website

Just follow these steps.

1) Create a Class Library project. I create a Visual C# Class Library project using Visual Studio and select C# as language and give it a name. I give my project name ShMyPdf.

I change the existing class. I change class name to DisplayPdf and it is inherited from WebControl class.


Bookmark and Share

Cookies trong ASP.NET

Tên bài viết: Cookies trongASP.NET
Tác giả: Quang.IT
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Cookies trongASP.NET
----------------------------------------------------------------------
Cookie là một tệp thông tin nhỏ được lưu trữ trên các máy của khách hảng(Client). Tập tin này nằm trên máy khách hàng tại địa chỉ:
"C:\Document and Settings\Currently_Login user\Cookie"
Nó được lưu trữ một vài thông tin của người dùng như Username, password, City hay PhoneNo... trên máy khách hàng.
Chúng ta cần phải gọi namespace cho nó là Systen.Web.HttpCookie trước khi chúng ta sử dụng Cookie
Bookmark and Share

Sự khác nhau giữa <%= %> và <%# %> trong asp.net

Khi sang làm việc với ASP.NET MVC, chúng ta phải làm việc nhiều hơn với thẻ <%= %> và <%# %> trong ASP.NET. Và thường thì khó phân biệt được sự khác nhau giữa các thẻ đó. Sau đây là đoạn code
Bookmark and Share

Tìm kiếm trong danh mục (C#)

Tìm kiếm trong danh mục

Khi viết các phần mềm, thường chúng ta phải sử dụng danh mục. Tùy theo mục đích mà bạn có thể chọn control phù hợp.

Trong một số trường hợp, các control có sẵn phù hợp với ý đồ của mình. Nhưng có những lúc, sử dụng control có sẵn thật nhàm chán và hiệu quả không cao.

Bookmark and Share

Tóm tắt kiến thức về môn NET Advanced Programming

1) Attribute:

Kiến thức cơ bản/Basic:
Attribute là không phải là những đoạn code, cũng không phải là đoạn comment, nó là những dòng viết thêm vào code nhằm mục đích hướng dẫn chương trình dịch cách “đối xử” với các class hoặc assembly.
Các Attribute trong giáo trình đề cập đến bao gồm:
Session 1 (Attribute) => Obsolete, DllImport, Conditional
Session 3 (Assembly) => assembly: AssemblyKeyFile
Session 13 (Serialization) => Serializable
….
Bookmark and Share

Tạo cây phân cấp nhưng không giới hạn về số cấp

 Tôi có 1 bảng như sau:
ID | Name | ParentID
1 | A | 0
2 | B | 0
3 | A1 | 1
4 | A11 | 3
5 | B1 | 2
6 | B2 | 2
và số cấp dc lặp không hạn chế!

Giờ tôi muốn hỏi cách làm thế nào để đưa dữ liệu trên về dạng:
A
- A1
- - A11
B
- B1
- B2
Trả lời:
Tôi tạo 1 TreeView (có tên là TreeView1) trong Winform, sau đó khởi tạo 1 DataTable để chứa dữ liệu mẫu.
Mời bạn xem qua đoạn code sau:

Viết trên Winform
using System;
 using System.Data;
 using System.Windows.Forms;
 using System.Collections;

 namespace TreeExample
 {
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }

         private readonly ArrayList totalNodes = new ArrayList();
         private void GetNodes(TreeNode node)
         {
             if (node.Nodes.Count > 0)
             {
                 foreach (TreeNode childNode in node.Nodes)
                 {
                     AddNode(node);
                     GetNodes(childNode);
                 }
             }
             else
             {
                 AddNode(node);
             }
         }

         private void GetTreeNodes(TreeView treeView)
         {
             this.totalNodes.Clear();
             foreach (TreeNode node in treeView.Nodes)
             {
                 GetNodes(node);
             }
         }

         private void AddNode(TreeNode node)
         {
             bool isExist = false;
             foreach (TreeNode treeNode in this.totalNodes)
             {
                 if (treeNode.Tag.ToString() == node.Tag.ToString())
                 {
                     isExist = true;
                     break;
                 }
             }
             if (isExist == false)
             {
                 this.totalNodes.Add(node);
             }
         }

         public void PopulateTreeView(DataTable dt, ref TreeView treeView)
         {
             DataRowCollection list = dt.Rows;
             ArrayList L = new ArrayList();
             ArrayList L1 = new ArrayList();
             ArrayList L2 = new ArrayList();

             foreach (DataRow r in list)
             {
                 L.Add(r);
                 L1.Add(r);
             }

             foreach (DataRow r in L)
             {
                 if (Convert.ToInt32(r["ParentID"]) == 0)
                 {
                     L2.Add(r);
                     TreeNode node1 = new TreeNode();
                     node1.Text = r["Title"].ToString();
                     node1.Tag = r["ID"].ToString();

                     treeView.Nodes.Add(node1);
                     L1.Remove(r);
                 }
             }
         Begin:
             while (L1.Count > 0)
             {
                 foreach (DataRow r2 in L2)
                 {
                     foreach (DataRow r1 in L1)
                     {
                         if (Convert.ToInt32(r1["ParentID"]) == Convert.ToInt32(r2["ID"]))
                         {
                             GetTreeNodes(treeView);
                             foreach (TreeNode node in totalNodes)
                             {
                                 if (node.Tag.ToString() == r1["ParentID"].ToString())
                                 {
                                     TreeNode node2 = new TreeNode();
                                     node2.Text = r1["Title"].ToString();
                                     node2.Tag = r1["ID"].ToString();
                                     node.Nodes.Add(node2);
                                 }
                             }
                             L2.Add(r1);
                             L1.Remove(r1);
                             goto Begin;
                         }
                     }
                 }
             }
         }


         private void Form1_Load(object sender, EventArgs e)
         {
             // Khởi tạo DataTable (hoặc có thể lấy từ database).
             DataTable dt = new DataTable();
             dt.Columns.Add("ID", typeof(int));
             dt.Columns.Add("Title", typeof(string));
             dt.Columns.Add("ParentID", typeof(int));

             DataRow row = dt.NewRow();
             row["ID"] = 1;
             row["Title"] = "Trang chủ";
             row["ParentID"] = 0;
             dt.Rows.Add(row);
             //
             row = dt.NewRow();
             row["ID"] = 12;
             row["Title"] = "Quản trị";
             row["ParentID"] = 0;
             dt.Rows.Add(row);
             //
             row = dt.NewRow();
             row["ID"] = 3;
             row["Title"] = "Quản trị nội dung";
             row["ParentID"] = 12;
             dt.Rows.Add(row);
             //
             row = dt.NewRow();
             row["ID"] = 9;
             row["Title"] = "Thư viện";
             row["ParentID"] = 0;
             dt.Rows.Add(row);
             //
             row = dt.NewRow();
             row["ID"] = 65;
             row["Title"] = "Download";
             row["ParentID"] = 9;
             dt.Rows.Add(row);
             //
             row = dt.NewRow();
             row["ID"] = 40;
             row["Title"] = "Quản trị văn bản";
             row["ParentID"] = 3;
             dt.Rows.Add(row);
             //
             row = dt.NewRow();
             row["ID"] = 400;
             row["Title"] = "Quản trị tài chính";
             row["ParentID"] = 12;
             dt.Rows.Add(row);

             PopulateTreeView(dt, ref treeView1);
         }
     }
 }
 

Viết trên Webform

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Khởi tạo DataTable (hoặc có thể lấy từ database).

            DataTable dt = new DataTable();

            dt.Columns.Add("ID", typeof(int));

            dt.Columns.Add("Title", typeof(string));

            dt.Columns.Add("ParentID", typeof(int));



            DataRow row = dt.NewRow();

            row["ID"] = 1;

            row["Title"] = "Trang chủ";

            row["ParentID"] = 0;

            dt.Rows.Add(row);

            //

            row = dt.NewRow();

            row["ID"] = 12;

            row["Title"] = "Quản trị";

            row["ParentID"] = 0;

            dt.Rows.Add(row);

            //

            row = dt.NewRow();

            row["ID"] = 3;

            row["Title"] = "Quản trị nội dung";

            row["ParentID"] = 12;

            dt.Rows.Add(row);

            //

            row = dt.NewRow();

            row["ID"] = 9;

            row["Title"] = "Thư viện";

            row["ParentID"] = 0;

            dt.Rows.Add(row);

            //

            row = dt.NewRow();

            row["ID"] = 65;

            row["Title"] = "Download";

            row["ParentID"] = 9;

            dt.Rows.Add(row);

            //

            row = dt.NewRow();

            row["ID"] = 40;

            row["Title"] = "Quản trị văn bản";

            row["ParentID"] = 3;

            dt.Rows.Add(row);

            //

            row = dt.NewRow();

            row["ID"] = 400;

            row["Title"] = "Quản trị tài chính";

            row["ParentID"] = 12;

            dt.Rows.Add(row);



            PopulateTreeView(dt, ref TreeView1);

        }

    private readonly ArrayList totalNodes = new ArrayList();

    private void GetNodes(TreeNode node)
    {

        if (node.ChildNodes.Count > 0)
        {

            foreach (TreeNode childNode in node.ChildNodes)
            {

                AddNode(node);

                GetNodes(childNode);

            }

        }

        else
        {

            AddNode(node);

        }

    }



    private void GetTreeNodes(TreeView treeView)
    {

        this.totalNodes.Clear();

        foreach (TreeNode node in treeView.Nodes)
        {

            GetNodes(node);

        }

    }



    private void AddNode(TreeNode node)
    {

        bool isExist = false;

        foreach (TreeNode treeNode in this.totalNodes)
        {

            if (treeNode.Target.ToString() == node.Target.ToString())
            {

                isExist = true;

                break;

            }

        }

        if (isExist == false)
        {

            this.totalNodes.Add(node);

        }

    }



    public void PopulateTreeView(DataTable dt, ref TreeView treeView)
    {

        DataRowCollection list = dt.Rows;

        ArrayList L = new ArrayList();

        ArrayList L1 = new ArrayList();

        ArrayList L2 = new ArrayList();



        foreach (DataRow r in list)
        {

            L.Add(r);

            L1.Add(r);

        }



        foreach (DataRow r in L)
        {

            if (Convert.ToInt32(r["ParentID"]) == 0)
            {

                L2.Add(r);

                TreeNode node1 = new TreeNode();

                node1.Text = r["Title"].ToString();

                node1.Target = r["ID"].ToString();



                treeView.Nodes.Add(node1);

                L1.Remove(r);

            }

        }

    Begin:

        while (L1.Count > 0)
        {

            foreach (DataRow r2 in L2)
            {

                foreach (DataRow r1 in L1)
                {

                    if (Convert.ToInt32(r1["ParentID"]) == Convert.ToInt32(r2["ID"]))
                    {

                        GetTreeNodes(treeView);

                        foreach (TreeNode node in totalNodes)
                        {

                            if (node.Target.ToString() == r1["ParentID"].ToString())
                            {

                                TreeNode node2 = new TreeNode();

                                node2.Text = r1["Title"].ToString();

                                node2.Target = r1["ID"].ToString();

                                node.ChildNodes.Add(node2);

                            }

                        }

                        L2.Add(r1);

                        L1.Remove(r1);

                        goto Begin;

                    }

                }

            }

        }

    }
}

Nguồn DNGAZ.com - Diễn đàn Đà Nẵng
Bookmark and Share

Chèn dữ liệu vào MS SQL Server

Trước hết, bạn sẽ tìm hiểu về mô hình kết nối đến MS SQL Server trong .NET


Tạo thông tin kết nối đến máy chủ chứa cơ sở dữ liệu MS SQL Server rồi sau đó thực hiện câu lệnh.
Cách làm như sau:
  1. Bạn khai báo 1 biến kiểu string để lưu thông tin kết nối:
  2. Tạo đối tượng kết nối SqlConnection.
  3. Thiết lập câu lệnh thực thi (INSERT) dữ liệu.
  4. Tạo đối tượng thực thi câu lệnh SqlCommand.
  5. Tạo các tham số (Parameters) cho câu lệnh (nếu có).
  6. Mở kết nối.
  7. Thực hiện câu lệnh thực thi dữ liệu.
  8. Đóng kết nối.
using System.Data;
using System.Data.SqlClient;

namespace MyDataAccess
{
publicclassMyClass
{
publicstaticvoid Insert()
{
// Tạo thông tin kết nối.
string connectionString = "server=(local);database=Northwind;user id=sa;password=";

// Tạo đối tượng kết nối.
SqlConnection conn = newSqlConnection(connectionString);

// Tạo câu lệnh T-SQL.
string commandText = "INSERT INTO Categories (CategoryName, Description) VALUES(@Name, @Description)";

// Tạo đối tượng thực hiện câu lệnh T-SQL.
SqlCommand comm = newSqlCommand(commandText, conn);

// Khởi tạo tham số.
comm.Parameters.Add("@Name", SqlDbType.NVarChar, 15);
comm.Parameters.Add("@Description", SqlDbType.NText);

// Gán giá trị cho tham số.
comm.Parameters["@Name"].Value = "My New Name";
comm.Parameters["@Description"].Value = "My New Description";

// Mở kết nối trước khi thực hiện lệnh.
conn.Open();

// Thực hiện lệnh.
comm.ExecuteNonQuery();

// Đóng kết nối.
conn.Close();
}
}
}
Bookmark and Share

CSS kết hợp với Ajax TabContainer Control trong asp.net

Tên bài viết: CSS kết hợp với Ajax TabContainer Control trong asp.net
Tác giả: Quang.It
Phiên bản: ASP.NET 2.0
Cấp độ bài viết: Dễ hiểu, nắm bắt nhanh, đơn giản.
Tóm tắt: Điều này giải thích cho chúng ta làm thế nào để tạo ra phong cách riêng của css cho Ajax TabContainer Control.
1> Đầu tiên tạo 1 ASP.NET AjaxEnabled Website.
2> Kéo và thả
TabContainer Control từ Toolkit đến web form.
3> Nhấn đúp
TabContainer Control để chuyển sang trang xử lý .CS
Chép code này vào:

<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" >
<cc1:TabPanel ID="TabPanel1" runat="server" HeaderText="Quang.IT">
<ContentTemplate>
<asp:TextBox ID="TextBox1" Text="Test by Quang" runat="server"></asp:TextBox>
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel ID="TabPanel2" runat="server" HeaderText="Storm">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Admin 4rum DNGAZ"></asp:Label>
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel ID="TabPanel3" runat="server" HeaderText="Diễn đàn Đà Nẵng">
<ContentTemplate>
<asp:Button ID="Button1" PostBackUrl="http://dngaz.com" runat="server" Text="Nhấn vào liên kết" />
</ContentTemplate>
</cc1:TabPanel>
</cc1:TabContainer>
Lưu ý: Phải có ScriptManager thì mới hoạt động được Ajax nhé.
4> Bây giờ cùng tạo file CSS. Đặt tên là: Tab.css
/*Header*/
.Tab .ajax__tab_header
{
color: #4682b4;
font-family:Calibri;
font-size: 14px;
font-weight: bold;
background-color: #ffffff;
margin-left: 0px;
}
/*Body*/
.Tab .ajax__tab_body
{
border:1px solid #b4cbdf;
padding-top:0px;
}
/*Tab Active*/
.Tab .ajax__tab_active .ajax__tab_tab
{
color: #ffffff;
background:url("tab_active.gif") repeat-x;
height:20px;
}
.Tab .ajax__tab_active .ajax__tab_inner
{
color: #ffffff;
background:url("tab_left_active.gif") no-repeat left;
padding-left:10px;
}
.Tab .ajax__tab_active .ajax__tab_outer
{
color: #ffffff;
background:url("tab_right_active.gif") no-repeat right;
padding-right:6px;
}
/*Tab Hover*/
.Tab .ajax__tab_hover .ajax__tab_tab
{
color: #000000;
background:url("tab_hover.gif") repeat-x;
height:20px;
}
.Tab .ajax__tab_hover .ajax__tab_inner
{
color: #000000;
background:url("tab_left_hover.gif") no-repeat left;
padding-left:10px;
}
.Tab .ajax__tab_hover .ajax__tab_outer
{
color: #000000;
background:url("tab_right_hover.gif") no-repeat right;
padding-right:6px;
}
/*Tab Inactive*/
.Tab .ajax__tab_tab
{
color: #666666;
background:url("tab_Inactive.gif") repeat-x;
height:20px;
}
.Tab .ajax__tab_inner
{
color: #666666;
background:url("tab_left_inactive.gif") no-repeat left;
padding-left:10px;
}
.Tab .ajax__tab_outer
{
color: #666666;
background:url("tab_right_inactive.gif") no-repeat right;
padding-right:6px;
margin-right: 2px;
}
5> Bây giờ thêm CssClass="Tab" đến TabContainer:

<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" CssClass="Tab" >

Bookmark and Share

Sử dụng DLL trong VS2008/ VS2010

Tên bài viết: Hướng dẫn sử dụng DLL trong VS2008/ VS2010
Tác giả: Quang.It
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Hướng dẫn từ khâu tạo file DLL đến việc sử dụng File DLL đơn giản nhất qua phép toán cộng trừ nhân chia bình thường
--------------------------------------------------------------------------

Phần I: Tạo 1 lớp thư viện (DLL)
Trong bài này chúng ta sẽ học làm thế nào để tạo 1 file DLL đơn giản
1. Mở một New Project như hình bên dưới và Chọn Class Library từ templates.

Điền tên và nơi chứa mà bạn muốn Lưu file
2. Đây là những gì bạn sẽ thấy trên cửa sổ chính.

Bây giờ tạo một hàm đơn giản trong lớp Class1.
Trong trường hợp này tôi đã tạo ra hàm cộng hai số.
3. Bây giờ, chọn Build Solution từ Build Menu trong thanhMenu.


4. Sau đây là các file DLL đã tạo ra trong thư mục Debug.
Bây giờ file DLL này có thể được sao chép và dán bất cứ nơi nào và có thể được sử dụng bởi bất kỳ số lượng các chương trình tại một điểm nhất định.

Phần 2: Sử dụng một Class Library (DLL)

Trong phần này, chúng ta sẽ học cách sử dụng các file DLL mà chúng a đã tạo ra.
Chú ý:
Không gian được sử dụng: CreateFileDLL
Class: Class1
Chức năng: tinhTong (int a, int b)
1. Tạo một Windows Application mới.


2. Xây dựng 1 Form đơn giản như phía dưới:


3. Bây giờ, chúng ta cần phải Add Reference từ File DLL mà chúng ta đã tạo ra trước đó.


4. Chọn File DLL từ thẻ browse.


5. Bây giờ, chúng ta sẽ sử dụng lớp và không gian tên của File.
Click trên button để tạo ra sự kiện(generate an EventHandler)
Lấy 1 không gian tên để thêm vào code



6. Tạo 1 đối tượng mới của lớp. Bây giờ thêm chức năng thành viên của lớp với đối tượng c.


7. Đây là cách xử lý sự kiện:


8. Bây giờ chạy chuờng trình bằng cách nhấn F5. Bạn sẽ thấy kết quả xuất ra sau khi nhấn button.



Đây là cách tạo và sử dụng DLL đơn giản. Từ đây chúng ta có thể tạo ra nhiều File DLL cho những phương thức phức tạp và sử dụng nó ở mọi nơi mà chúng ta thích
Nguồn DNGAZ.com - Diễn đàn Đà Nẵng
Bookmark and Share

C# và SQL Server 2005

Tên bài viết: C# và SQL Server 2005
Tác giả: Quang.It / IDE
Cấp độ bài viết: Cơ bản
Tóm tắt: Các thao tác cơ bản C# với SQL Server 2005



C# và SQL Server 2005

Hiện nay, ngoài Access, hệ quản trị cơ sở dữ liệu SQL Server được sử dụng rất phổ biến. Bài này sẽ đề cập đến các thao tác cơ bản giữa C# và SQL Server.
Để sử dụng đươc bài hướng dẫn này các bạn hãy tải file Database backup nằm ở trang đầu tiên này và restore nó vào SQL Server của mình.
Database này có tên là SampleTest bên trong có một Table tên là Danhsach..
Bảng này gồm có năm cột
STT : kiểu int
Name, Address, Phone, Email có kiểu là ntext.

1. Namespace cần thiết :
Để có thể thao tác tốt với SQL Server chúng ta nên sử dụng namespace.


using System.Data;
using System.Data.SqlClient;//Namespace dùng cho SQL

2. Kết nối với SQL Server
Để có thể kết nối chúng ta phải tạo ra chuỗi kết nối Connection String cung cấp cho nó đầy đủ các thành phần sau


  1. Server hay Data Source = tên máy chủ\tên thể hiện của máy chủ SQL
  2. Database hay Intial Catalog = Tên của Database mà mình định truy xuất trong SQL.
  3. User id = Tên người sử dụng
  4. Password = Mật mã bảo vệ
  5. Integrated Security=SSPI hay true// bảo mật
  6. Persist Security Info=False // Không trả về thông tin bảo mật
Ví dụ:
  1. String varConnect = @"Data Source=servercomputer\sqlexpress;" +
  2. "database=SampleTest;" +
  3. "User ID =sa;"+
  4. "Password =;" +
  5. "Integrated Security=SSPI;" +
  6. "Persist Security info =false";
Trong đó Servercomputer là tên máy tính của mình, SqlExpress là 1 thể hiện của máy chủ sql. Do đó bạn phải chỉnh sử lại cho phù hợp với máy của mình.
SampleTest là cơ sở dữ liệu mẫu được restore lại trong SQL.
Để tạo kết nối chúng ta dùng lớp SqlConnection.
Code hoàn chỉnh tạo kết nối và hủy kết nối;

  1. SqlConnection objConnect;
  2. #region "Tạo kết nối và hủy kết nối"
  3. /// <summary>
  4. /// Tạo kết nối
  5. /// </summary>
  6. private void subCreateConnect()
  7. {
  8. String varConnect = @"Data Source=servercomputer\sqlexpress;" +
  9. "database=SampleTest;" +
  10. "User ID =sa;"+
  11. "Password =;" +
  12. "Integrated Security=SSPI;" +
  13. "Persist Security info =false";
  14. objConnect = new SqlConnection(varConnect);
  15. objConnect.Open();
  16. }
  17. /// <summary>
  18. /// Hủy kết nối
  19. /// </summary>
  20. private void subDestroyConnect()
  21. {
  22. objConnect.Close();
  23. objConnect.Dispose();
  24. objConnect = null;
  25. }
  26. #endregion
3. Truy xuất dữ liệu trong SQL

3.1 Truy xuất dữ liệu bằng SQL trực tiếp có truyền tham số
Dùng SqlCommand để thực thi câu lệnh SQL.
Ở đây ta sẽ dùng SqlDataReader để đọc dữ liệu với tốc độ nhanh.

  1. private void subSelectBySQLTruyềnthamsố()
  2. {
  3. subCreateConnect();
  4. //Lệnh cần thúc hiện
  5. SqlCommand objCommand = new SqlCommand();
  6. objCommand.Connection = objConnect;
  7. objCommand.CommandText = "Select * from Danhsach where STT>@STT";
  8. objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = 3;
  9. SqlDataReader objReader = objCommand.ExecuteReader();
  10. DataTable objTable = new DataTable();
  11. objTable.Load(objReader);
  12. DGSQL.DataSource = objTable;
  13. //Hủy đối tượng
  14. objCommand.Dispose();
  15. objCommand = null;
  16. objTable.Dispose();
  17. objTable = null;
  18. subDestroyConnect();
  19. }
3.2 Truy xuất dữ liệu thông quan Adapter
Ở đây ta sẽ dùng SqlDataAdapter để thực thi command và dữ liệu lấy về sẽ được điền vào Datatable thông qua Fill.

  1. private void subSelectBySQLAdapter()
  2. {
  3. subCreateConnect();
  4. //Command
  5. SqlCommand objCommand = new SqlCommand();
  6. objCommand.Connection = objConnect;
  7. objCommand.CommandText = "Select * from Danhsach where STT>@STT";
  8. objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = 4;
  9. //SqlAdapter
  10. SqlDataAdapter objAdapter = new SqlDataAdapter();
  11. objAdapter.SelectCommand = objCommand;
  12. DataTable objTable = new DataTable();
  13. objAdapter.Fill(objTable);
  14. DGSQL.DataSource = objTable;
  15. //Hủy đối tượng
  16. objCommand.Dispose();
  17. objCommand = null;
  18. objTable.Dispose();
  19. objTable = null;
  20. objAdapter.Dispose();
  21. objAdapter=null;
  22. subDestroyConnect();
  23. }
4. Binhding DataGridView với Textbox
Có nhiệm vụ khi ta clịck vào dòng nào trong DataGridView thì các dữ liệu trên dòng đó sẽ hiển thị trên Textbox.

  1. private void subDatabinding()
  2. {
  3. txtSTT.DataBindings.Clear();
  4. txtSTT.DataBindings.Add("Text", DGSQL.DataSource, "STT");
  5. txtName.DataBindings.Clear();
  6. txtName.DataBindings.Add("Text", DGSQL.DataSource, "Name");
  7. txtAddress.DataBindings.Clear();
  8. txtAddress.DataBindings.Add("Text", DGSQL.DataSource, "Address");
  9. txtPhone.DataBindings.Clear();
  10. txtPhone.DataBindings.Add("Text", DGSQL.DataSource, "Phone");
  11. txtEmail.DataBindings.Clear();
  12. txtEmail.DataBindings.Add("Text", DGSQL.DataSource, "Phone");
  13. }
5. Insert 1 Record vào trong Table

5.1 Insert dữ liệu vào Table bằng SQL trực tiếp có truyền tham số

  1. private void subInsertDulieucótruyềnthamsố()
  2. {
  3. subCreateConnect();
  4. //Command
  5. SqlCommand objCommand = new SqlCommand();
  6. objCommand.Connection = objConnect;
  7. objCommand.CommandType = CommandType.Text;
  8. objCommand.CommandText = "Insert into Danhsach Values (@STT,@Name,@Address, @Phone, @Email)";
  9. //THam số
  10. objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = Convert.ToInt32(txtSTT.Text);
  11. objCommand.Parameters.Add("@Name", SqlDbType.NText).Value = txtName.Text;
  12. objCommand.Parameters.Add("@Address", SqlDbType.NText).Value = txtAddress.Text;
  13. objCommand.Parameters.Add("@Phone", SqlDbType.NText).Value = txtPhone.Text;
  14. objCommand.Parameters.Add("@Email", SqlDbType.NText).Value = txtEmail.Text;
  15. objCommand.ExecuteNonQuery();
  16. //Hueỷ đối tượng
  17. objCommand.Dispose();
  18. objCommand = null;
  19. subDestroyConnect();
  20. }
Dùng objCommand.ExecuteNonQuery(); để thực thi command.

5.2 Insert dữ liệu vào Table thông qua Adapter
Để Insert được 1 record mới vào trong table thông qua Adapter thì đầu tiên ta phải Insert thêm 1 dòng mới vào trong Table trước.

  1. private void subInsertDữliệuByAdapter()
  2. {
  3. subCreateConnect();
  4. //Command
  5. SqlCommand objCommand = new SqlCommand();
  6. objCommand.Connection = objConnect;
  7. objCommand.CommandText = "Select * from Danhsach where STT>@STT";
  8. objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = 4;
  9. //SqlAdapter
  10. SqlDataAdapter objAdapter = new SqlDataAdapter();
  11. objAdapter.SelectCommand = objCommand;
  12. DataTable objTable = new DataTable();
  13. objAdapter.Fill(objTable);
  14. //Insert 1 dòng mới vào DataTable
  15. DataRow objRow = objTable.NewRow();
  16. objRow["STT"] = Convert.ToInt32(txtSTT.Text);
  17. objRow["Name"] = txtName.Text;
  18. objRow["Address"] = txtAddress.Text;
  19. objRow["Phone"] = txtPhone.Text;
  20. objRow["Email"] = txtEmail.Text;
  21. objTable.Rows.Add(objRow);
  22. //Tạo command để Insert dữ liệu vào Database nguồn
  23. objCommand = new SqlCommand();
  24. objCommand.Connection = objConnect;
  25. objCommand.CommandType = CommandType.Text;
  26. objCommand.CommandText = "Insert into Danhsach Values (@STT,@Name,@Address, @Phone, @Email)";
  27. //THam số
  28. objCommand.Parameters.Add("@STT", SqlDbType.Int,5,"STT");
  29. objCommand.Parameters.Add("@Name", SqlDbType.NText,30,"Name");
  30. objCommand.Parameters.Add("@Address", SqlDbType.NText,30,"Address");
  31. objCommand.Parameters.Add("@Phone", SqlDbType.NText,10,"Phone");
  32. objCommand.Parameters.Add("@Email", SqlDbType.NText,30,"Email");
  33. //Update dòng mới vào nguồn
  34. objAdapter.InsertCommand = objCommand;
  35. objAdapter.Update(objTable);
  36. //Hủy đối tượng
  37. objCommand.Dispose();
  38. objCommand = null;
  39. objTable.Dispose();
  40. objTable = null;
  41. objAdapter.Dispose();
  42. objAdapter = null;
  43. subDestroyConnect();
  44. }
Bookmark and Share

SOAP and .NET Remoting

Tên bài viết:SOAP and .NET Remoting
Tác giả: Quang.It / Nguồn C-sharp
Cấp độ bài viết: Cơ bản
Tóm tắt: Tìm hiểu giao thức Soap và .NET remoting


SOAP and .NET Remoting
Simple Object Access Protocol (SOAP) là một giao thức chuẩn công nghiệ được thiết kế để cải thiện khả năng tương tác qua nền tảng bằng cách sử dụng World Wide Web và Extensible Markup Language (XML- ngôn ngữ đánh dấu). Với sự ra đời của XML như là một cú pháp tài liệu gắn thẻ tiêu chuẩn, dẫn xuất đã bắt đầu xuất hiện trong phạm vi. XML phát triển thành SOAP, và SOAP đã phát triển thành BizTalk. Như vậy, SOAP và BizTalk có thực sự không có quan hệ, nhưng các tài liệu XML chuyên ngành. Trước sự xuất hiện của SOAP, Microsoft thực hiện COM + (một phần mở rộng của Component Object Model), những người ủng hộ được hỗ trợ Java Enterprise JavaBeans (EJB), và các công ty khác hỗ trợ đối tượng thường gặp yêu cầu trung gian Kiến trúc (CORBA). Trong thực tế, tất cả các mô hình này đã cố gắng để làm cho việc sử dụng thành phần từ xa dễ dàng và an toàn. Tuy nhiên, chúng chỉ xử lý các thành phần của cùng một kiểu, không ai trong số họ có thể giao tiếp với những người khác. SOAP đã thể hiện khả năng này. Nó giải quyết vấn đề không tương thích nền tảng trong việc tiếp cận dữ liệu. Đó là một cú pháp cho phép bạn xây dựng ứng dụng từ xa gọi các phương pháp trên các đối tượng. SOAP loại bỏ các yêu cầu mà hai hệ thống phải chạy trên nền tảng giống nhau hoặc được viết bằng ngôn ngữ lập trình như nhau. Thay vì cách gọi phương pháp nhị phân thông qua một giao thức độc quyền, một gói SOAP cú pháp sử dụng một tiêu chuẩn mở cho các phương pháp thực hiện phương thức gọi. Đó là cú pháp XML.

SOAP là chỉ đơn giản bằng XML cộng với Hypertext Transfer Protocol (HTTP). SOAP gửi một XML yêu cầu đến một máy chủ SOAP trên HTTP và nhận được phản hồi trở lại trong XML. Bởi vì HTTP trên thực tế là phương thức giao tiếp trên Internet, với tất cả các máy chủ Web công nhận và đáp ứng một yêu cầu HTTP, nó là một giao thức lý tưởng cho phép tích hợp các hệ thống khác nhau. XML đang nổi lên như một tiêu chuẩn de facto trao đổi thông tin giữa các hệ thống khác nhau. Việc sử dụng SOAP của XML để gửi và nhận tin nhắn đảm bảo rằng bất kỳ hệ thống trên nền tảng nào cũng có thể đọc và xử lý tin nhắn, không giống như với một định dạng sở hữu độc quyền.

Hiện tại công nghệ như Distributed Component Object Model (DCOM) hoặc CORBA cho phép các thành phần được phân phối, tuy nhiên, DCOM và CORBA sử dụng gọi thủ tục từ xa (RPC) để liên lạc, mà không làm việc tốt trên Internet. Hơn nữa, cả hai máy khách và máy chủ phải có cùng một hoặc tương tự hệ thống và hệ điều hành cho DCOM hay CORBA để làm việc. Thiết lập thời gian cũng có thể cần thiết để thực hiện các giải pháp làm việc. Đối với những lý do này, chúng tôi không coi giải pháp DCOM và CORBA như hỗ trợ các thành phần được phân phối đúng sự thật. Với phân phối các thành phần đúng, khách hàng và máy chủ có thể khác nhau. Các máy khách và máy chủ có thể có hệ điều hành khác nhau và chạy trên các loại máy và các mạng lưới khác nhau. Bởi vì SOAP sử dụng XML trên HTTP để giao tiếp, nên nó cung cấp đúng thành phần được phân phối hỗ trợ.

SOAP không phải là một thay thế cho COM hay CORBA, tuy nhiên, COM và CORBA có thể sử dụng SOAP để cho phép họ làm việc qua mạng Internet. SOAP sử dụng các tiêu chuẩn thông dụng XML và HTTP để thúc đẩy khả năng tương tác giữa các hệ thống không đồng nhất bất cứ nơi nào trên Internet. Dịch vụ Web đang nhanh chóng nổi lên như một mô hình giải pháp mới, và nó sẽ không được quá lâu trước khi bạn bắt đầu sử dụng SOAP để xây dựng các dịch vụ Web. Dịch vụ Web lộ dữ liệu thông qua Web mà không cần định dạng nó. Hãy suy nghĩ các dịch vụ web như các ứng dụng mà làm cho nó có thể cho bạn vào chương trình bằng cách sử dụng dữ liệu có sẵn trên Web, cũng như chương trình bây giờ bạn có thể sử dụng dữ liệu có sẵn trong nội bộ. Các ứng dụng trên nền tảng khác nhau chỉ có một khả năng giới hạn chia sẻ dữ liệu. . Nhận thức được những hạn chế, các nhà phát triển đã đẩy áp đảo để thành lập các tiêu chuẩn cho các định dạng dữ liệu và trao đổi dữ liệu. Điều này xuất phát từ một tầm nhìn đó là nhanh chóng phát triển thành một mô hình điện toán mới: các liền mạch, Web cho phép tích hợp các dịch vụ trên phần cứng truyền thống và các rào cản phần mềm.

Giới thiệu về SOAP

A SOAP document is an electronic envelope into which you place your payload. Một tài liệu SOAP là một bao thư điện tử mà bạn đặt vào trọng tải của bạn. The payload consists of the tags that describe the method you want to invoke and the data that method invocation needs to do its job. tải trọng này bao gồm các từ để mô tả các phương pháp bạn muốn gọi và dữ liệu mà phương pháp gọi trình cần làm công việc của mình. A SOAP envelope document has two sub elements the SOAP:Header and SOAP:Body. Một phong bì tài liệu SOAP có hai yếu tố phụ của SOAP: Đầu trang và SOAP: cơ thể. The SOAP:Header element contains information about the transaction. Các SOAP: Header phần tử chứa thông tin về giao dịch. The Body contains the content data. Cơ thể chứa các dữ liệu nội dung. (Note that in our examples we will refer to HTTP protocol when we mean SOAP communication protocol, but other protocols will be supported by new SOAP versions.) (Lưu ý rằng trong ví dụ của chúng tôi, chúng tôi sẽ giới thiệu đến giao thức HTTP khi chúng tôi có nghĩa là giao thức truyền thông SOAP, nhưng các giao thức khác sẽ được hỗ trợ bởi phiên bản mới SOAP.)

Như bạn có thể nhìn thấy trong hình , một khách hàng gửi một yêu cầu SOAP (định dạng XML) trên bất kỳ giao thức SOAP đã hỗ trợ (ví dụ, HTTP) cho một “người nghe” máy chủ SOAP tại một trang web khác. Điều này nghe bắt máy chủ nhắn tin, diễn giải các yêu cầu, và chạy sẽ là một phương pháp trên một đối tượng trong miền của mình. Đó là một cái gì đó trả về đối tượng hữu ích (định dạng XML phản ứng) để ứng dụng của chúng ta bằng cách trả lời thông qua các máy chủ SOAP để chờ đợi ứng dụng client.



lưu ý rằng các đối tượng được gọi không cần bất kỳ loại sửa đổi.[/FONT] Các máy chủ SOAP sẽ giải thích các tài liệu SOAP XML mà đến trên HTTP, truyền Control Protocol (TCP), hoặc đơn giản Mail Transfer Protocol (SMTP) kết nối. Sau đó máy chủ SOAP biến các tài liệu XML thành một cái gì đó có ý nghĩa rằng các đối tượng hiểu. Các máy chủ SOAP nói ngôn ngữ SOAP và ngôn ngữ của đối tượng được gọi, dịch hội thoại giữa chúng. Do đó, đối tượng có thể được phát triển trong bất kỳ ngôn ngữ lập trình trên bất kỳ hệ điều hành hay nền tảng.

Một gói SOAP (hình) chỉ đơn giản chứa thông tin được sử dụng để gọi một phương thức.
Nhưng các đặc điểm kỹ thuật SOAP không định nghĩa thế nào phương pháp mà là để được gọi. Nó chỉ chứa những gì để gọi với cái gì, không làm thế nào để gọi. Điều này làm cho máy khách và máy chủ truyền thông lỏng và hầu hết miễn phí. Mặt khác, một vài thứ SOAP không làm tốt. Nó không cung cấp bất kỳ phương tiện để giao tiếp hai chiều, loại an toàn, phân phối thu gom rác, hoặc tin nhắn có chứa nhiều hơn một tài liệu thương mại (tin nhắn SOAP có thể chứa chỉ có một tài liệu thương mại!). Tuy nhiên, SOAP cho phép chúng ta vượt qua các thông số và lệnh giữa HTTP, TCP, và SMTP khách hàng và máy chủ, và điều này được thực hiện độc lập của bất kỳ nền tảng, hệ điều hành, hoặc các ứng dụng. Tất nhiên, các lệnh và các thông số thông qua trở lại và ra là tất cả mã hóa trong ứng dụng SOAP Client gửi yêu cầu Data SOAP Server từ xa chỉ có Object Currently HTTP / HTTPS, nhưng trong tương lai, SMTP, FTP, hoặc thực hiện Nghị định thư khác bằng cú pháp XML SOAP. XML cung cấp cho chúng ta một cú pháp định dạng mà để thể hiện gần như bất kỳ loại dữ liệu nào. Refer to the XML chapter if you need a refresher on XML. Hãy tham khảo các chương XML nếu bạn cần bồi dưỡng thêm về XML.



Các đặc điểm kỹ thuật xác định các yếu tố SOAP, mà có thể được sử dụng với một yêu cầu SOAP: chúng là những vỏ, đầu, và thân.
Vỏ là một container cho đầu và thân. Đầu chứa thông tin về tin nhắn SOAP, và thân có chứa thông điệp thực sự. Không gian tên được sử dụng để phân biệt các yếu tố SOAP từ các yếu tố khác của các tải trọng. For example, SOAPENV: Envelope, SOAP-ENV:Head, and SOAP-ENV:Body are used in a SOAP document. Ví dụ, SOAPENV: Envelope, SOAP-ENV: Head, và SOAP-ENV: Body được sử dụng trong một tài liệu SOAP. Đoạn code dưới cho thấy một schema SOAP cho vỏ của SOAP 1.1.

<?xmlversion="1.0" ?>
<!--
XML Schema for SOAP v 1.1 Envelope -->
<!--
Copyright 2000 DevelopMentor, International Business
Machines Corporation, Lotus Development Corporation,
Microsoft, UserLand Software
-->
<
schemaxmlns="http://www.w3.org/1999/XMLSchema"
xmlns:tns
="http://schemas.xmlsoap.org/soap/envelope/"
targetNamespace
="http://schemas.xmlsoap.org/soap/envelope/">
<!--
SOAP envelope, header, and body -->
<
elementname="Envelope"type="tns:Envelope"/>
<
complexTypename="Envelope">
<
elementref="tns:Header"minOccurs="0"/>
<
elementref="tns:Body"minOccurs="1"/>
<
anyminOccurs="0"maxOccurs="*"/>
<
anyAttribute/>
</
complexType>
<
elementname="Header"type="tns:Header"/>
<
complexTypename="Header">
<
anyminOccurs="0"maxOccurs="*"/>
<
anyAttribute/>
</
complexType>
<
elementname="Body"type="tns:Body"/>
<
complexTypename="Body">
<
anyminOccurs="0"maxOccurs="*"/>
<
anyAttribute/>
</
complexType>

<!--
Global Attributes. The following attributes are
intended to be usable via qualified attribute names on any complex type referencing them.
-->
<
attributename="mustUnderstand"default="0">
<
simpleTypebase="boolean">
<
patternvalue="0|1"/>
</
simpleType>
</
attribute>
<
attributename="actor"type="uri-reference"/>

<!--
'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing
element. For example, the value
'http://schemas.xmlsoap.org/soap/encoding/' indicates
the pattern described in SOAP specification. -->
<
simpleTypename="encodingStyle"base="uri-reference"
derivedBy="list"/>
<
attributeGroupname="encodingStyle">
<
attributename="encodingStyle"
type="tns:encodingStyle"/>
</
attributeGroup>

<!--
SOAP fault reporting structure -->
<
complexTypename="Fault"final="extension">
<
elementname="faultcode"type="qname"/>
<
elementname="faultstring"type="string"/>
<
elementname="faultactor"type="uri-reference"
minOccurs="0"/>
<
elementname="detail"type="tns:detail"minOccurs="0"/>
</
complexType>
<
complexTypename="detail">
<
anyminOccurs="0"maxOccurs="*"/>
<
anyAttribute/>
</
complexType>
</
schema>

Khi chúng ta sử dụng HTTP, chúng tôi sử dụng phương thức yêu cầu POST vì với phương thức này, như trái ngược với phương thức GET, kích thước của các tiêu đề HTTP là không giới hạn. Chúng ta sẽ thấy hai loại tiêu đề trong yêu cầu HTTP-phần đầu và phản hồi phần đầu . Xin vui lòng tham khảo các tài liệu RFC2616 (Hypertext Transfer Protocol-HTTP 1,1 bởi R. et al Fielding chi tiết.). Đoạn code dưới cho thấy một ví dụ về một yêu cầu HTTP POST Head. Bạn có thể thêm bất kỳ Head nào bạn muốn HTTP, ví dụ, trong bảng liệt kê SOAP Action là tăng HTTP header SOAP đề cập đến phương pháp từ xa, UpdateData, để được gọi và Uniform Resource Locator của nó (URL).

POST Yêu cầu HTTP Header


POST /Order HTTP/1.1

Host: www.mindcracker.com
Content-Type: text/xml
Content-Length: nnnn

SOAPAction: "http://www.mindcracker.com#UpdateData"

Thông tin được gửi đi sẽ được đặt ở đây.


Cho thấy một loại phản hồi tốt-HTTP header.


HTTP Header đáp ứng tốt


200 OK

Content-Type: text/plain
Content-Length: nnnn
Nội dung tại đây.


Cho thấy một header HTTP phản ứng xấu.


HTTP Header đáp ứng Bad


400 Bad Request
Content-Type: text/plain
Content-Length: 0

Một yêu cầu tài liệu SOAP mà không có tiêu đề HTTP được hiển thị trong đoạn code

<SOAP-ENV:Envelope
xmlns:xsi
="http://www.w3.org/1999/XMLSchema/instance"
xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope"
xsi:schemaLocation
=
"http://www.mindcracker.com/schemas/Schema.xsd">
<
SOAP-ENV:Headerxsi:type="MindcrackerHeader">
<
COM:GUIDxmlns:COM="http://comobject.northwindtraders.com">
10000000-0000-abcd-0000-000000000001
</
COM:GUID>
</
SOAP-ENV:Header>
<
SOAP-ENV:Bodyxsi:type="MindcrackerBody">
<
OrderUpdate>
<
orderID>0</orderID>
<
item>89</item>
</
OrderUpdate>
</
SOAP-ENV:Body>
</
SOAP-ENV:Envelope>

Cho thấy một body SOAP schema-các nội dung của tập tin http://www.mindcracker.com/schemas/Schema.xsd.
Schema.xsd File Contents
<xsd:schemaxmlns:xsd="http://www.w3.org/1999/XMLSchema"
targetNamespace
="http://schemas.xmlsoap.org/soap/envelope"
xmlns:SOAP
="http://schemas.xmlsoap.org/soap/envelope">
<
xsd:complexTypename="MindcrackerHeader">
<
xsd:elementname="GUID"type="string"/>
</
xsd:complexType>
<
xsd:complexTypename="MindcrackerBody">
<
xsd:elementname="OrderUpdate">
<
xsd:complexType>
<
elementname="orderID"type="integer"/>
<
elementname="item"type="double"/>
</
xsd:complexType>
</
xsd:element>
</
xsd:complexType>
</
xsd:schema>

Successful SOAP Response Document

<
SOAP-ENV:Envelope
xmlns:xsi
="http://www.w3.org/1999/XMLSchema/instance"
xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope"
xsi:schemaLocation
=
"http://www.mindcracker.com/schemas/Schema.xsd">
<
SOAP-ENV:Bodyxsi:type="MindcrackerBody">
<
OrderUpdate>
<
orderID>09999</orderID>
<
return>0</return>
</
OrderUpdate>
</
SOAP-ENV:Body>
</
SOAP-ENV:Envelope>

Faulty SOAP Response Document

<
SOAP-ENV:Envelope
xmlns:xsi
="http://www.w3.org/1999/XMLSchema/instance"
xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope"
xsi:schemaLocation
=
"http://www.mindcracker.com/schemas/Schema.xsd">
<
SOAP-ENV:Fault>
<
SOAP-ENV:faultcode>200</SOAP-ENV:faultcode>
<
SOAP-ENV:faultstring>
Must Understand Error
</
SOAP-ENV:faultstring>
<
SOAP-ENV:detailxsi:type="Fault">
<
errorMessage>
The object cannot be found or is not installed.
</
errorMessage>
</
SOAP-ENV:detail>
</
SOAP-ENV:Fault >
</
SOAP-ENV:Body>
</
SOAP-ENV:Envelope>

Sau đây là một ví dụ về một máy chủ SOAP # C / khách hàng với phương pháp triển khai UpdateData:

public int OrderUpdateMethod(ref int OrderID, double Item);

Thông tin thêm về SOAP mã hóa có sẵn tại http://www.w3.org/tr/soap.
SOAP được sử dụng rộng rãi bởi các nhà phát triển làm việc với Remoting. NET, dịch vụ web (ASP.NET), và Active Template Library (ATL) Server của C + + bản địa, các dịch vụ Web unmanaged code.

Kết luận


Hy vọng bài viết này sẽ giúp các bạn hiểu SOAP và Remoting. Xem các bài viết khác trên trang web trên và. NET C #.
Nguồn DNGAZ.com - Diễn đàn Đà Nẵng
Bookmark and Share
previous home

Cộng đồng yêu thiết kế Việt Nam Thiet ke website, danang