1.1、Web Service基本概念
Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。
Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
1.2、XML Web Service的特点
Web Service的主要目标是跨平台的可互操作性。为了实现这一目标,Web Service 完全基于XML(可扩展标记语言)、XSD(XML Schema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。因此使用Web Service有许多优点:
1、跨防火墙的通信
如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。传统的做法是,选择用浏览器作为客户端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。 要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,从而省掉建立ASP页面的那一步。要调用Web Service,可以直接使用Microsoft SOAP Toolkit或.net这样的SOAP客户端,也可以使用自己开发的SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的"结果页"。
2、应用程序集成
企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需要从运行的一台主机上的程序中获取数据;或者把数据发送到主机或其它平台应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过Web Service,应用程序可以用标准的方法把功能和数据"暴露"出来,供其它应用程序使用。
XML Web services 提供了在松耦合环境中使用标准协议(HTTP、XML、SOAP 和 WSDL)交换消息的能力。消息可以是结构化的、带类型的,也可以是松散定义的。
3、B2B的集成
B2B 指的是Business to Business,as in businesses doing business with other businesses,商家(泛指企业)对商家的电子商务,即企业与企业之间通过互联网进行产品、服务及信息的交换。通俗的说法是指进行电子商务交易的供需双方都是商家(或企业、公司),她们使用了Internet的技术或各种商务网络平台,完成商务交易的过程。
Web サービスは B2B 統合を成功させる鍵です。 Web サービスを通じて、企業は指定されたサプライヤーや顧客に主要なビジネス アプリケーションを単に「公開」することができます。Web サービスはインターネット上で実行され、世界中のどこでも簡単に実装でき、運用コストは比較的低くなります。 Web サービスは B2B 統合の重要な部分にすぎず、統合を実現するには他の多くの部分が必要です。 Web サービスを使用して B2B 統合を実装する最大の利点は、相互運用性を簡単に実現できることです。ビジネス ロジックが「公開」され、Web サービスになる限り、指定されたパートナーは、システムがどのプラットフォームで実行されているか、またはどの開発言語が使用されているかに関係なく、これらのビジネス ロジックを呼び出すことができます。これにより、B2B 統合にかかる時間とコストが大幅に削減されます。
4. ソフトウェアとデータの再利用
Web サービスは、コードの再利用を許可しながら、コードの背後でデータを再利用できます。 Web サービスを使用すると、以前のようにサードパーティからソフトウェア コンポーネントを購入してインストールする必要がなくなり、アプリケーションからこれらのコンポーネントを呼び出すだけで済みます。ソフトウェアの再利用のもう 1 つの状況は、複数のアプリケーションの機能を統合し、Web サービスを通じてそれらを「公開」することです。これらすべての機能をポータル サイトに簡単に統合し、統一された使いやすいインターフェイスをユーザーに提供できます。 サードパーティの Web サービスが提供する機能をアプリケーションで使用したり、独自のアプリケーション機能を Web サービスを通じて他のユーザーに提供したりできます。どちらの場合も、コードとその背後にあるデータは再利用できます。
上記の説明からわかるように、Web サービスは、Web を介して相互運用したり、リモート呼び出しを行ったりする場合に最も役立ちます。ただし、Web サービスがまったくメリットをもたらさない状況もあります。Web サービスには次のような欠点があります。
1. スタンドアロン アプリケーション
現在、企業や個人は依然として多くのデスクトップ アプリケーションを使用しています。それらの中には、単にマシン上の他のプログラムと通信する必要があるものもあります。この場合、Web サービスを使用せず、ローカル API を使用するのが最善です。 COM は小さくて高速であるため、この状況での作業に最適です。同じサーバー上で実行されているサーバー ソフトウェアについても同様です。もちろん、このような状況でも Web サービスを使用することはできますが、消費量が多すぎるだけでなく、何のメリットもありません。
2. LAN のいくつかのアプリケーション
多くのアプリケーションでは、すべてのプログラムが Windows プラットフォームで COM を使用し、同じ LAN 上で実行されます。これらのプログラムでは、SOAP/HTTP よりも DCOM を使用した方がはるかに効率的です。同様に、.net プログラムが LAN 上の別の .net プログラムに接続したい場合は、.net Remoting を使用する必要があります。実際、.net Remoting では、SOAP/HTTP を使用して Web サービス呼び出しを行うように指定することもできます。ただし、TCP 経由で直接 RPC 呼び出しを行う方がはるかに効率的です。
1.3. XML Web サービスのアプリケーション
1. オリジナルの XML Web サービスは、通常、株価、天気予報、スポーツのスコアなど、アプリケーションに簡単に組み込むことができる情報源です。
2. 既存のアプリケーションを XML Web サービスとして提供すると、より強力な新しいアプリケーションを構築し、XML Web サービスを構成要素として活用できます。
たとえば、ユーザーは、さまざまなサプライヤーから価格情報を自動的に取得する調達アプリケーションを開発できます。これにより、ユーザーはサプライヤーを選択し、注文を送信し、商品を受け取るまで商品の出荷を追跡できるようになります。サプライヤーのアプリケーションは、Web 上でサービスを提供するだけでなく、XML Web サービスを使用して顧客の信用を確認し、代金を回収し、運送会社との運送手続きを行うこともできます。
2.Webサービス開発
.net プラットフォームには、Web サービスの構築と使用を含む、Web サービスのサポートが組み込まれています。他の開発プラットフォームとは異なり、.net プラットフォームを使用すると、Web サービスの開発を完了するために他のツールや SDK は必要ありません。 .net Framework 自体は、サーバー側の要求プロセッサやクライアントによる SOAP メッセージの送受信のサポートなど、Web サービスを完全にサポートしています。次に、Microsoft Visual Studio .net 20058 (以下、VS.Net 2008) を使用して、簡単な Web サービスを作成して使用する手順を説明します。
2.1.
を使用して最も単純な Web サービスを作成します。まず、VS2005 を開き、「ファイル - 新しい Web サイト」を開き、「ASP.NET Web サービス」を選択します
Service.cs コードを見ると、VS.Net 2005 が Web サービス ファイルのデフォルト フレームワークを確立していることがわかります。元のコードは次のとおりです:
コードをコピー コードは次のとおりです:
System を使用;
System.Web を使用;
Xml.Linq を使用; .org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// ASP.NET AJAX の使用を許可するには スクリプトからこの Web サービスを呼び出すには、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {
//デザインを使用する場合コンポーネントは、次の行のコメントを解除してください。
//InitializeComponent();
}
[WebMethod]
public string HelloWorld()
{
return "Hello World"; }
}
System を使用;
System.Linq を使用;
System.Web を使用;
System.Web.Services を使用;
System.Web.Services.Protocols を使用; 🎜>using System.Xml.Linq;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To 許可するASP.NET AJAX を使用してスクリプトからこの Web サービスを呼び出す場合は、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class Service: System.Web.Services.WebService
{
public Service () {
//デザインを使用する場合コンポーネントの場合は、以下をキャンセルしてください:
//initializecomponent ();
}
[webmedhod]
Public String HelloWorld ()
{
Return "Hello World"; > }
}
デフォルトのプロジェクトにはすでに Hello World メソッドが存在します。それを直接実行して効果を確認してください。
表示ページの図にある「HelloWorld」ハイパーリンクをクリックして、次のページに移動します:
「呼び出し」ボタンをクリックすると、以下に示すように XML 形式で返された Web サービスの結果が表示されます。これは、Web サービス環境に問題がないことを示しており、最も単純な Web サービスについても事前に連絡していました。
2.2. 関数を使用した単純な Web サービスの作成
上記では、Web サービスのマクロを理解しています。実際、これは外部の顧客が呼び出すことができる関数があります (注: 顧客が呼び出すことができない関数もあります)。がサーバーである場合、それを Web サービスとして作成し、それをクライアントに提供します (同時に呼び出しルールを提供します)。クライアントはサーバーから情報を取得するときに比較的透過的な状態にすることができます。クライアントはプロセスを理解せず (必要もありません)、データを取得するだけです。 コード ファイルで関数を作成し、この関数を外部から呼び出し可能なインターフェイス関数にしたい場合は、コード行 [WebMethod(関数の上に description="関数の説明情報")] を記述します。関数にこの宣言がない場合、ユーザーは関数を参照できません。簡単な Web サービスの例を作成してみましょう。
まずデフォルトの HelloWorld メソッドをコメントアウトし、単純に加算、減算、乗算、除算の 4 つのメソッドを記述します。
コードをコピー
コードは次のとおりです:
System を使用;
System.Web を使用;
Xml.Linq を使用; .org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// ASP.NET AJAX の使用を許可するには スクリプトからこの Web サービスを呼び出すには、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {
//デザインを使用する場合コンポーネント、次の行のコメントを解除してください。
//InitializeComponent();
}
//[WebMethod]
//public string HelloWorld()
//{
// return "Hello World";
//}
[WebMethod(Description = "Sum Method")]
public double add(double i, double j)
{
return i j ; > }
[WebMethod(Description = "差分を求めるメソッド")]
public double subject(double i, double j)
{
return i - j; > [WebMethod(Description = "求積法")]
public double multiplication(double i, double j)
{
return i * j;
}
[WebMethod (Description = 「商の求め方」)]
public double Division(double i, double j)
{ if (j != 0)
return i / j;
else
return 0;
System を使用;
System.Linq を使用;
System.Web を使用;
System.Web.Services を使用;
System.Web.Services.Protocols を使用;
System を使用。 Xml.Linq;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// ASP.NET の使用を許可するにはAJAX スクリプトからこの Web サービスを呼び出すには、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class Service: System.Web.Services.WebService
{
public Service () {
//デザインを使用する場合コンポーネント、次の行のコメントを解除してください
// InitializeComponent(); return "Hello World";
//}
[WebMethod(Description = "Sum Method")]
public double add(double) i, double j)
{
return i j ;
}
[WebMethod(Description = "差分を求めるメソッド")]
public double subject(double i, double j)
{
return i - j;
}
(説明 = "商の求め方")]
public double Division(double i, double j)
{
if (j != 0)
return i / j;
else
return 0;
これを実行すると、以下に示すように、呼び出し可能なメソッドが記述されていることがわかります。
同様に追加メソッドをクリックして、追加メソッドの呼び出しページに入ります。
上の図に示すように、パラメーターの上にパラメーター i=3、j=3 を入力し、[呼び出し] をクリックすると、次のように XML 形式で返された Web サービスの結果 (i と j を追加した結果) が表示されます。以下
この時点で、Web サービスは実際にはそれほど神秘的ではないことがわかります。私たちにとって、焦点はインターフェース関数の作成です。
まず、VS2005 を開き、[ファイル]、[新しい Web サイト] の順に開き、[ASP.NET Web サイト] を選択します。
保存場所と言語を選択し、「OK」をクリックしてデフォルトのページに入ります。次に、最初に Web 参照を追加し、WebService を現在のプロジェクトに導入します。方法は、リソース マネージャーを右クリックし、[Web 参照の追加] を選択して、ダイアログ ボックスを表示します:
URL、WebService実行後にブラウザに表示されるアドレス(WebServiceリリース後のアクセスアドレス)を入力し、「Go」ボタンをクリックすると、上図のように参照先のWebServiceが表示されます。呼び出すことができるメソッドを選択し、[参照の追加] をクリックして現在のプロジェクトに Web サービスを参照します。以下に示すように、インポートされた WebService ファイルがソリューションに表示されます
ここでは、Web サービスを呼び出す 4 つの方法を練習し、簡単な呼び出しの例を作成します。まず、Web サイトのフロント デスクにいくつかのコントロールを追加します。
コードをコピー
コードは次のとおりです:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
次に、呼び出しコードをバックグラウンドで作成します。呼び出す前に、他のオブジェクトを使用する場合と同様に、最初にインスタンス化する必要があります。これにより、WebService にアクセスできるようになります。内部にはメソッドが提供されています。この例では、WebService 呼び出しをトリガーするボタン コントロールが動的に作成されます。バックグラウンド コードは次のとおりです。
以下の図に示すように、最初の 2 つのテキスト ボックスに 2 つのオペランドを入力します。中央のドロップダウン リストから演算子を選択し、「=」記号をクリックすると、計算結果が 3 番目のテキスト ボックスに出力されます。
計算全体はローカルで実行されません。計算は Web サーバー上で行われ、結果は XML を通じて呼び出し元に返されます。したがって、プログラムを実行するときは、WebService プログラムも開始する必要があります。そうしないと、例外が発生します。以下に示すように、リモート サーバーに接続できないことが報告されました:
背景コードは次のとおりです:
コードをコピーします コードは次のとおりです:
using System;
using System.Configuration
using System.Data; ; >System.Linq を使用;
System.Web.UI を使用;
System.Web を使用.UI.WebControls.WebParts;
using System.Xml.Linq; {
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs) e)
{
string selectFlag = selectOper.Value;
localhost.Service web = new localhost.Service();
if (selectFlag.Equals(" "))
{
Result.Text =(web.addition(double.Parse(Num1.Text) ),double.Parse(Num2.Text))).ToString(); subtract(double.Parse(Num1.Text), double.Parse( Num2.Text))).ToString(); 🎜> Result.Text = (web.multiplication(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString(); /")) > }
}
コードをコピー
コードは次のとおりです:
System を使用;
System.Configuration を使用;
System.Data を使用;
System.Linq を使用;
System.Web を使用;
System.Web.Security を使用;
System.Web.UI を使用する;
System.Web.UI.HtmlControls を使用する;
System.Web.UI.WebControls を使用する;
System.Web.UI.WebControls.WebParts を使用する;
使用するSystem.Xml.Linq;
public 部分クラス _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string selectFlag = selectOper.Value;
localhost.Service web = new localhost.Service();
if (selectFlag.Equals(" ") )
{
Result.Text =(web.addition(double.Parse(Num1.Text),double.Parse(Num2.Text))).ToString();
}
else if (selectFlag.Equals("-"))
{
Result.Text = (web.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();
}
else if (selectFlag.Equals("*"))
{
Result.Text = (web.multiplication(double.Parse(Num1.Text), double.Parse(Num2. Text))).ToString();
}
else if (selectFlag.Equals("/"))
{
Result.Text = (web.division(double.Parse(Num1. Text)、double.Parse(Num2.Text))).ToString();
}
}
}
ここまでの、単一の WebService の公開と調整が完了しました。実際のアプリケーションでは、必要に応じて、いくつかの機能が強化された単一の WebService を、複数の場合に限らず、全体のフローとして書き込むことができます。