"nsHello", // Assembly
"nsHello.Hello", // Full type name
"host/Hello.soap", // URI WellKnownObjectMode.Singleton ); // Object Mode
/* Wait until the user wants to exit */
Console.WriteLine( "Listening for requests - Press ENTER to exit" ); String keyState = Console.ReadLine();
}
}
Trong những thông báo .NET Framework được chuyển qua lại từ đối tượng điều khiển thông qua Channels Objects gói gọn những giao thức mạng nằm bên dưới tạo sự kết nối trình khách/máy chủ. Trong hello_host.cs, chúng tôi muốn sử dụng Kênh HTTP gắn sẵn, mà những sự vận chuyển truyền tin sử dụng giao thức SOAP.
makefile: Một tập tin biên dịch cho hello_host.cs và hello.cs. all: hello_host.exe hello.dll
hello_host.exe: hello_host.cs
csc /r:System.Runtime.Remoting.dll hello_host.cs hello.dll: hello.cs
csc /t:library hello.cs Trình khách
Bây giờ, máy chủ được tạo ra chúng ta có thể tập trung vào trình khách. Tập tin hello_client.cs là một ứng dụng mà sẽ tiêu thụ dịch vụ được phơi bày bởi hello_host.cs của chúng ta để triệu gọi phương thức từ xa SayHello.
hello_client.cs: Một người tiêu dùng của hello_host.cs using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.HTTP; using nsHello;
public class HelloClient
{
public static Main( String[] args )
{
/* Obtain a Proxy to the SOAP URL */ Hello h = (Hello)Activator.GetObject(
typeof(Hello), "http://localhost:1099/host/Hello.soap" );
/* The following occurs over SOAP to HelloHost */ Console.WriteLine( h.SayHello( "Dick" ) );
}
}
Trong hello_client.cs chúng ta sử dụng phương thức GetObject thay vì từ khóa mới để kích hoạt đối tượng từ xa bởi vì chúng tôi bằng tay đang kích hoạt đối tượng. Chúng tôi đã chưa sử dụng hồ sơ cấu hình từ xa, chúng tôi có thể đã sử dụng từ khóa New tới cùng hiệu ứng.
Với ví dụ trước đây, chúng ta cần biên dịch ứng dụng. Lệnh sau sẽ biên dịch tập tin hello_client.cs:
csc /r:System.Runtime.Remoting.dll /r: hello.dll hello_client.cs
Một khi cả máy chủ lẫn những ứng dụng trình khách được xây dựng, chúng tôi có thể kiểm tra chúng bởi lần đầu tiên chạy hello_host.exe trong một cửa sổ và sau đó chạy hello_client.exe trong cửa sổ khác. Bạn sẽ nhìn thấy hello_client.exe đáp ứng với một thông điệp “Hello Dick” trên màn hình.
II. Cài đặt các ứng dụng hướng e-Business bằng Biztalk Server
Trừ khi chúng ta đang làm việc cho một doanh nghiệp dot-com thuần túy, chúng ta có lẽ cho phép dữ liệu cư trú trong một số cơ sở dữ liệu cũ hơn, bên trong những tập tin phẳng (flat files), hay loại tài nguyên khác nào đó. Nếu đây là trường hợp, và bạn vẫn còn có một nhu cầu tới sự truy nhập, cập nhật, và dùng dữ liệu này, bạn có lẽ đã tìm thấy chính bạn
giáp mặt với sự thực hiện và tính linh hoạt chảy ra. Những hệ thống đơn giản có lẽ đã không có những phương pháp thích hợp của việc truy nhập và sử dụng dữ liệu những ứng dụng.
Qua vài mục tiếp theo chúng tôi sẽ bàn luận những ứng dụng của BizTalk và nó có thể được dùng giải quyết những vấn đề này. Chúng tôi sẽ nói về sự hợp nhất ứng dụng doanh nghiệp, sự hợp nhất từ doanh nghiệp tới doanh nghiệp (business-to-business) (B2B) và tự động hóa qui trình nghiệp vụ.
Muốn đọc một số nghiên cứu tình huống thế giới thực của BizTalk đã được sử dụng như thế nào cho sự thi hành và giải quyết thể hiện khác nhau này? Kiểm tra tại địa chỉ http://www.microsoft.com/biztalk/evaluation/casestudies để xem danh sách các công ty và tài liệu trên cài đặt của chúng.
Sự tích hợp ứng dụng doanh nghiệp
Trong một thế giới kỹ thuật nơi nhiều lập trình viên Java, C#, hay ngôn ngữ kịch bản (scripting) nào đó đại diện cho tất cả các phương pháp luật và là người có những hệ thống cũ nhất đó là Windows 98 hay Windows NT 4. Kết quả tìm kiếm COBOL,nNhững máy tính lớn, một hệ thống bộ nhớ ảo (Virtual Memory System - VMS), sự vận hành trên sự mở rộng địa chỉ ảo (Virtual Address eXtension - VAX), và những màn ảnh trên nền văn bản đóng vai xương sống tới những toàn bộ doanh nghiệp có thể là bình thường, một cách đặc biệt trong những công ty lớn. Những hệ thống gia tài này là sự yên tĩnh rộng rãi được dùng, được triển khai, và phụ thuộc vào cho những hoạt động doanh nghiệp đang diễn ra.
Trên tất cả mọi thứ khác, bộ máy chủ BizTalk của những ứng dụng được thiết kế cho sự dễ dàng của sự hợp nhất. Nó sử dụng những tiêu chuẩn công nghiệp nặng nề, tương tự XML, SOAP, và BizTalk Framework. Nó cung cấp những công cụ cho phép chúng ta để tạo ra những sự trình bày XML của dữ liệu thừa kế các bạn và sự truy nhập và sự sử dụng dữ liệu đó phối hợp. Điều này giảm bớt sự hợp nhất của các bạn vào trong hệ thống thừa kế để đơn giản hỗ trợ một số đặc tính XML cơ bản, và BizTalk sẽ cầm lấy nó từ điểm đó.
Thừa kế dữ liệu, tuy nhiên, là không phải dữ liệu duy nhất mà với BizTalk có thể truyền thông và số nguyên. Thật ra, những điều này của chung ta tạo ra dịch vụ web dựa trên nền tảng XML như vỏ bìa trong cuốn sách này, chúng ta có lẽ đã tìm thấy máy chủ phục vụ BizTalk là hệ thống hoàn hảo để xử lý sự xử lý của những thông điệp.
Sự tích hợp doanh nghiệp-đến-doanh nghiệp
Tích hợp với những ứng dụng bên trong là chỉ có một kiểu của sự cài đặt hữu ích cho máy chủ BizTalk. Nhiều doanh nghiệp được xây dựng những hệ thống nền tảng XML hay những giao diện mà cho phép chúng tự động hóa truyền thông của chúng và sự trao đổi với khách hàng và những công ty đối tác. Ví dụ, một công ty bán lẻ có lẽ đã thu được những sự mô tả sản phẩm và đặt giá trong một khuôn dạng XML. Việc sử dụng máy phục vụ BizTalk là khả năng vẽ bản đồ một mô hình tới người khác, bạn có thể cảm thấy tin cậy rằng bạn có thể thiết kế những mô hình của riêng mình để đúng đối với doanh nghiệp của chúng ta, và tuy thế không giới hạn sự hợp nhất của chúng ta với những đối tác.
BizTalk Mapper chiết tự cho phép chúng ta vẽ những đường thẳng giữa những phần tử và những thuộc tính của hai mô hình, với kết quả là một tờ kiểu XSLT mà sẽ thay đổi dữ liệu của đối tác của chúng ta vào trong một khuôn dạng tới hệ thống của chúng ta. Khả năng này cho phép bạn để xây dựng một giải pháp nền tảng XML bên trong công ty của chúng ta.
Tự động hóa quá trình kinh doanh
Tự động hóa quá trình kinh doanh được di chuyển tới mặt trước trong hôm nay là kinh tế. Nếu một công ty thì có thể giảm bớt thời gian và những chi phí được liên quan đến một nhiệm vụ đặc biệt, như sự kiểm tra kiểm kê, lợi tức của công ty có lẽ đã không tăng, trừ phi nó đã giảm bớt những chi phí hàng đáy của nó và những lợi nhuận như vậy đang gia tăng. Tự động hóa có thể là một sự chuyển động vô cùng quan trọng và cất giữ chi phí cho công ty, một cách đặc biệt khi những tài chính là một sự liên quan chính.
BizTalk Orchestration Designer, cùng với Messaging Manager, BizTalk mang tới một bảng trực quan là phương pháp dựa trên trực quan để thiết kế, tiến bộ, và tự động hóa qui trình nghiệp vụ này. Với những công cụ này chúng có thể thiết kế những toàn bộ quá trình để xử lý những yêu cầu đầu vào hay những tài liệu và tạo ra những hồ sơ chương trình mà có thể được xử lý và theo dõi.
III. Truy cập dữ liệu và XML
Trước khi có Windows.NET, OLEDB và ActiveX Data Objects (ADO) là API chính cho việc truy cập dữ liệu trong Microsoft Windows. Với sự ra đời của .NET, Microsoft giới thiệu
một nhánh mô hình mới để truy cập dữ liệu gọi là ADO.NET, nó hỗ trợ mô hình truy cập dữ liệu và chức năng hoàn hảo cho đa tầng, môi trường web phân tán.
Tất cả ba mô hình đối tượng truy nhập dữ liệu, OLEDB, ADO, và ADO.NET, cung cấp những mức khác nhau hỗ trợ XML. Trước tiên chúng ta khảo sát qua ba mô hình và sự hỗ trợ cho XML của chúng.
OLEDB và ADO
Cả hai OLEDB và ADO đều dựa vào công nghệ COM. OLEDB cung cấp một mức thấp và phương pháp hiệu quả cao của việc truy nhập và thao tác dữ liệu có quan hệ, trong khi ADO được xây dựng trên OLEDB, cung cấp một phương tiện dễ dàng hơn để sự truy nhập dữ liệu. Sự hỗ trợ XML trong ADO được cung cấp xuyên qua Recordset Persitence và được thực hiện bởi Microsoft OLE DB Persistence Provider. Nhà cung cấp này có tạo một đối tượng ADO Recordset, phát sinh một tài liệu XML và thông tin giản đồ liên quan, và lưu trữ mọi thứ vào một stream hay tập tin. Tương tự, bộ cung cấp này còn có thể phát sinh một đối tượng Recordset chỉ đọc và chỉ tiến từ một tập tin XML hoặc một stream.
Ví dụ dưới đây cho thấy chúng ta có thể tạo một đối tượng Recordset để tạo ra tập tin XML như thế nào.
ADORecordset2XML.cs: Persisting an ADO Recordset object to an XML file. using System;
using System.Data; using System.Data.SQL;
public class ADORecordset2XML
{
public static void Main( String[] args )
{
try
{
String connString = "provider=SQLOLEDB;" + "initial catalog=pubs;" + "server=localhost;" +
"uid=sa;" + "pwd=";
String queryString = "select * from titles";
/* Instantiate a Recordet object */ ADODB.Recordset rs = new ADODB.Recordset();
/* Connect to the database and execute a SQL query */ rs.Open( queryString, connString,
ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly, 0 );
/* Export Recordset to "titles.xml" file in XML format. */
rs.Save( "titles.xml", ADODB.PersistFormatEnum.adPersistXML );
/* close the Recordset object */ rs.Close();
}
catch ( Exception e )
{
Console.WriteLine( "Exception: {0}", e.ToString() );
}
}
}
Trong ví dụ trên, chúng ta tạo ra tập tin titles.xml, trong ví dụ dưới đây, chúng ta sẽ xem xét việc tạo đối tượng Recordset từ tập tin titles.xml ở trên.
XML2ADORecordset.cs: Recreating the Recordset object from the titles.xml file. using System;
using System.Data; using System.Data.SQL;
public class XML2ADORecordset
{
public static void Main( String[] args )
{
try
{
String connString = "provider=SQLOLEDB;" + "initial catalog=pubs;" + "server=localhost;" +
"uid=sa;" + "pwd=";
Int32 adCmdFile = 256;
/* Instantiate Recordset object */ ADODB.Recordset rs = new ADODB.Recordset();
/* Open the titles.XML file into Recordset object */ rs.Open( "titles.xml", connString,
ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, adCmdFile );
/* Display the value of the price field for the first record */ rs.MoveFirst();
Console.WriteLine( rs.Fields[ "price" ].Value );
/* close the Recordset object */ rs.Close();
}
catch ( Exception e )
{
Console.WriteLine( "Exception: {0}", e.ToString() );
}
}
}
XML sự hỗ trợ trong ADO hạn chế để nói là bé nhất. Bạn có thể chỉ vẫn tạo và xây dựng lại những đối tượng Recordset qua lại giữa tập tin XML và stream. Tập tin XML vẫn tách biệt với đối tượng Recordset cũ và bất kỳ sự thay đổi nào mà chúng ta tạo ra sẽ không được thể hiện một cách tự động.
ADO.NET
ADO.NET được chào hàng như người kế thừa từ ADO và dựa trên nền tảng XML. Tiêu điểm lõi của ADO.NET sẽ cung cấp một API tạo điều kiện thuận lợi cho sự tạo thành những ứng dụng phân tán, biến đổi được, và tương tác được và chia sẻ dữ liệu trong một kiểu không kết nối liên tục.
ADO.NET gồm có hai phần: lớp Dataset và Managed Providers. Lớp Dataset cung cấp những phương thức và thuộc tính để truy nhập và thao tác dữ liệu có quan hệ. . Managed Providers mô tả dữ liệu lưu trữ nằm bên dưới như một cơ sở dữ liệu Microsoft SQL Server.
Các không gian tên xây dựng trong ADO.NET
Diễn giải | |
System.Data | Chứa lớp Dataset và các lớp cơ sở khác |
System.Data.ADO | Chứa các lớp ADO Managed Provider. |
System.Data.SQL | Chứa các lớp SQL Server Managed Provider. |
System.Data.SQLT ypes | Chứa các lớp cho các kiểu dữ liệu trong SQL Server. |
Có thể bạn quan tâm!
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 28
- Cơ Chế Xác Lập Ứng Dụng Liên Quan Đến Nhiều Nền Tảng.
- Hãy Xây Dựng Một Ứng Dụng Thực Tế Liên Quan Đến Nhiều Nền Tảng Dựa Vào Web Service
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 32
Xem toàn bộ 258 trang tài liệu này.
Lớp DataSet
Lớp DataSet là trung tâm đối với ADO.NET và là gói chính cho sự truy nhập dữ liệu và sự thao tác trong .NET Framework. DataSet là kết nối không thường xuyên và là hiển thị từ trong bộ nhớ của một cơ sở dữ liệu. Bạn có thể có một DataSet động được tạo ra và cư trú với dữ liệu không có một byte đơn của truyền thông được tạo ra với một DBMS. Sự khử
ghép này giữa dữ liệu và nguồn dữ liệu nằm bên dưới là lõi có thể cho phương thức hành động kết nối không liên tục ADO.NET.
Từ bên trong, chúng có thể nghĩ về một Dataset như một tài liệu XML chứa đựng một hoặc nhiều mẩu bản in rời hay liên hệ những phần tử XML xếp thành bảng. Thật ra, .NET cung cấp một mô hình lập trình hợp nhất để truy nhập dữ liệu được đại diện cho như cả dữ liệu XML lẫn dữ liệu có quan hệ. Bạn có thể bắt đầu với một DataSet và làm việc với dữ liệu đi theo sau một đường không tuần tự, có thứ bậc được điều khiển bởi XML DOM. Bù lại, bạn có thể làm việc với tài liệu XML trong kiểu hàng- sau- hàng xuyên qua một Dataset sử dụng một mô hình quan hệ.
Lớp The XmlDataDocument
Lớp XmlDataDocument được mở rộng từ chính lớp XmlDocument, nào là sự bọc trong nang sơ cấp trong ADO.NET cho một tài liệu XML. XmlDataDocument cung cấp khả năng thêm để thao tác dữ liệu có quan hệ. cũng như tất cả XML khác- những lớp liên quan,XmlDataDocument cư trú không gian tên System.Xml..
Trong ví dụ sau dùng mã lệnh C# để nhận dữ liệu từ một cơ sở dữ liệu SQL Server và sử dụng XmlDataDocument để thao tác dữ liệu:
DataSet2XmlDataDocument.cs: Manipulating relational data using the DOM. using System;
using System.IO; using System.Data;
using System.Data.SQL; using System.Xml;
public class DataSet2XmlDataDocument
{
public static void Main( String[] args )
{
SQLConnection conn = null; try
{
/* connect to the SQL Server database */
conn = new SQLConnection( "server= localhost;uid=sa;pwd=;database=pubs" );
/* execute SQL query */
SQLDataSetCommand cmd = new SQLDataSetCommand( "select * from Titles",
conn );
/* create a DataSet and populate it with the records returned from result of the above SQL query */
DataSet ds = new DataSet(); cmd.FillDataSet( ds, "Titles" );
/* associate this DataSet with an XmlDataDocument */ XmlDataDocument doc = new XmlDataDocument( ds );
/* you can now process this doc just like any
DataDocument. For example,
the following uses DataDocumentNavigator to select the first Titles node and modifies the value. */
DataDocumentNavigator nav = new DataDocumentNavigator
( doc );
nav.Select( "//NewDataSet/Titles[1]/title_id" ); if ( nav.MoveToNextSelected() )
{
Console.WriteLine( "Original=" + nav.InnerText );
}
else
{
Console.WriteLine( "Unexpected error: Node not found" );
}
nav.InnerText = "BU1030"; /* modify the value of the title_id node */
/* XmlDataDocument auto synchronizes the above change with the associated DataSet. */
Console.WriteLine( "Modified=" + ds.Tables[ "Titles" ].Rows[ 0 ][ "title_id" ] );
}
finally
{
if ( conn != null && conn.State == DBObjectState.Open )
{
conn.Close();
}
}
}
}
Ví dụ sau thao tác với dữ liệu sử dụng một Dataset XmlDataDocument2DataSet.cs: Manipulating an XML document using a DataSet. using System;
using System.IO; using System.Data; using System.Xml;
public class Xml2DataSet
{
public static void Main()
{
try
{
/* instantiate a XmlDataDocument */ XmlDataDocument doc = new XmlDataDocument();
/* load the schema */ doc.DataSet.ReadXmlSchema( "book.xsd" );
/* now load the XML document */ doc.Load( "book.xml" );
/* print original price value of first Title node */ DataDocumentNavigator nav = new DataDocumentNavigator( doc ); nav.Select( "//Book/Titles[1]/price" );
if ( nav.MoveToNextSelected() )
{
Console.WriteLine( "Original=" + nav.InnerText );
}
/* update a price using the associated DataSet */ DataTable books = doc.DataSet.Tables[ "Titles" ]; books.Rows[ 0 ][ "price" ] = "12.99";
/* display modified price */ nav.Select( "//Book/Titles[1]/price" ); if ( nav.MoveToNextSelected() )
{
Console.WriteLine( "Modified=" + nav.InnerText );
}
}
catch (Exception e)
{
Console.WriteLine ("Exception: {0}", e.ToString());
}
}
}
Ví dụ sau là tài liệu xml được sử dụng ở trên:
book.xml: An XML document used in XmlDataDocument2DataSet.cs.
<Book>
<Titles>
<title_id>BU1032</title_id>
<title>The Busy Executive's Database Guide</title>
<type>business</type>
<pub_id>1389</pub_id>
<price>19.99</price>
<advance>5000</advance>
<royalty>10</royalty>
<ytd_sales>4095</ytd_sales>
<notes>An overview of available database systems with emphasis on common business applications. Illustrated.</notes>
<pubdate>1991-06-11T16:00:00</pubdate>
</Titles>
<Titles>
<title_id>BU1111</title_id>
<title>Cooking with Computers: Surreptitious Balance Sheets
</title>
<type>business</type>
<pub_id>1389</pub_id>
<price>11.95</price>
<advance>5000</advance>
<royalty>10</royalty>
<ytd_sales>3876</ytd_sales>
<notes>Helpful hints on how to use your
electronic resources to the best advantage.</notes>
<pubdate>1991-06-08T16:00:00</pubdate>
</Titles>
<Titles>
<title_id>BU2075</title_id>
<title>You Can Combat Computer Stress!</title>
<type>business</type>
<pub_id>0736</pub_id>
<price>2.99</price>
<advance>10125</advance>
<royalty>24</royalty>
<ytd_sales>18722</ytd_sales>
<notes>The latest medical and psychological techniques for living with the electronic office. Easy-to-understand explanations.</notes>
<pubdate>1991-06-29T16:00:00</pubdate>
</Titles>
</Book>
Sau đây là tập tin giản đồ sử dụng cho tập tin book.xml: 16-6 book.xsd: The XML schema for book.xml.
<xsd:schema id="Book" targetNamespace="" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata= "urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="Titles">
<xsd:complexType content="elementOnly">
<xsd:all>
<xsd:element name="title_id" type="xsd:string"/>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="type" type="xsd:string"/>
<xsd:element name="pub_id" minOccurs="0" type="xsd:string"/>
<xsd:element name="price" minOccurs="0" type="xsd:decimal"/>
<xsd:element name="advance" minOccurs="0" type="xsd:decimal"/>
<xsd:element name="royalty" minOccurs="0" type="xsd:int"/>
<xsd:element name="ytd_sales" minOccurs="0" type="xsd:int"/>
<xsd:element name="notes" minOccurs="0" type="xsd:string"/>
<xsd:element name="pubdate" type="xsd:timeInstant"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="NewDataSet" msdata:IsDataSet="True">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="Titles"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
IV. Parsing và tạo các tài liệu XML.
XmlReader và XmlWriter là những lớp trừu tượng của mô hình đối tượng XML trong
.NET Framework. XmlReader cung cấp API để đọc những tài liệu XML, trong khi XmlWriter cung cấp API bổ sung để sản xuất những tài liệu XML tương thích W3C. Trong việc thiết kế những lớp này, Microsoft mượn những khái niệm từ cả DOM lẫn SAX.
XmlReader
Lớp trừu tượng XmlReader cung cấp một con trỏ nhanh, chỉ đọc, và chỉ đọc tiến những tài liệu XML. Việc sử dụng XmlReader nhiều cũng như việc sử dụng DOM, bạn đọc và làm việc với một nút tại một thời điểm. Một phương thức C# sau đây mà đi ngang qua một tài liệu XML và trình bày những tên của tất cả các phần tử trong tài liệu.
public void DisplayElements( XmlReader reader )
{
/* read the next node in document order */ while ( reader.Read() )
{
/* if this is an element node, display its name */ Console.WriteLine( reader.Name );
}
}
Phương thức C# sau đây sẽ hiển thị giá trị trong phần tử hiện tại: public void DisplayNode( XmlReader node )
{
switch ( node.NodeType )
{
case XmlNodeType.Element: Console.Write( "<" + node.Name + ">" ); break;
case XmlNodeType.Text: Console.Write( node.Value ); break;
case XmlNodeType.CDATA: Console.Write( node.Value ); break;
case XmlNodeType.ProcessingInstruction:
Console.Write( "<?" + node.Name + " " + node.Value + "?>" ); break;
case XmlNodeType.Comment: Console.Write( "<!--" + node.Value + "-->" ); break;
case XmlNodeType.Document: Console.Write( "<?xml version='1.0'?>" ); break;
case XmlNodeType.Whitespace: