- Webサービスの呼び出し方法
Webサービスは、プラットフォームに依存しない、低結合の、自己完結型のWebベースのアプリケーションです。公開されたXML標準を使用して記述、公開、発見、調整、および構成できます。分散型の相互運用可能なアプリケーションの開発に使用されます。
Webサービス技術により、異なるマシン上で実行されている異なるアプリケーションは、追加の専用のサードパーティーソフトウェアやハードウェアを介さずにデータを交換したり統合したりできます。Webサービス仕様に基づいて実装されたアプリケーション間では、使用している言語、プラットフォーム、または内部プロトコルに関係なく、データを相互に交換できます。
Webサービスは自己記述的で、ネットワーク経由で利用可能なモジュールであり、具体的なビジネス機能を実行できます。Webサービスは、XML、HTTPなどの産業標準や既存の技術に基づいているため、簡単に展開できます。
Webサービスを呼び出す方法には以下のものがあります:
- フロントエンドからの呼び出し:AJAXを使用
- バックエンドからの呼び出し:サービス参照の追加
- 公安システムとの連携:アプリケーションが自社のWebサービスをAJAXで呼び出し、そのWebサービスが公安のインターフェースを呼び出すことで、データ同期を実現
Webサービスが公安のインターフェースを呼び出す際は、HttpWebRequestクラスを使用してリクエストを送信し、HttpWebResponseで応答を取得します。
public static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//常に受け入れる
return true;
}
public static string CallPoliceApi(string endpoint, string token, string postData)
{
var encryptionHelper = new EncryptionHelper();
var policeModel = new PoliceModel();
var rsaProcessor = new RsaProcessor();
string result;
string publicKey = ConfigurationManager.AppSettings["publicKey"];
string privateKey = ConfigurationManager.AppSettings["privateKey"];
string appId = ConfigurationManager.AppSettings["appId"];
string appSecret = ConfigurationManager.AppSettings["appSecret"];
string randomKey = Guid.NewGuid().ToString("N");
string timestamp = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();
string rawString = "appId=" + appId + "&appSecret=" + appSecret + "&randomKey=" + randomKey + "×tamp=" + timestamp;
string signature = encryptionHelper.Sha256Encrypt(rawString);
string encryptedBody = rsaProcessor.Encrypt(appSecret, publicKey);
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateCertificate);
var request = (HttpWebRequest)WebRequest.Create(endpoint);
request.Headers.Add("appId", appId);
request.Headers.Add("randomKey", randomKey);
request.Headers.Add("timestamp", timestamp);
request.Headers.Add("signature", signature);
if (endpoint != "https://100.16.7.12/dev/hotelindustry/public/index.php/api/Server/getToken")
{
request.Headers.Add("token", token);
}
request.Method = "POST";
request.Timeout = 5000;
request.ContentType = "raw";
byte[] data = Encoding.UTF8.GetBytes(postData);
request.ContentLength = data.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(data, 0, data.Length);
requestStream.Close();
}
var response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return rsaProcessor.Decrypt(result, privateKey);
}
- Web APIの呼び出し方法
Web APIは、HTTPプロトコルを使用してリソースを操作するための軽量なインターフェースです。RESTfulアーキテクチャに基づいて設計されています。
Web APIを呼び出す方法:
- フロントエンドからの呼び出し:AJAXを使用
- GET:データの取得
- POST:新規作成
- PUT:更新
- DELETE:削除
- バックエンドからの呼び出し:HttpClientクラスを使用
GET操作の例:
public ActionResult Index()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync("http://localhost:16947/api/Products").Result;
var products = response.Content.ReadAsAsync<List<Product>>().Result;
ViewData.Model = products;
return View();
}
POST操作の例:
private static readonly HttpClient httpClient = new HttpClient();
public string SendDataToApi(string url, HotelData data)
{
string content = JsonConvert.SerializeObject(data);
var httpContent = new StringContent(content, Encoding.UTF8);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var responseTask = httpClient.PostAsync(url, httpContent);
var statusCode = responseTask.Result.StatusCode;
return statusCode != HttpStatusCode.OK
? responseTask.Result.Content.ReadAsStringAsync().Result
: $"StatusCode: {statusCode}";
}
public class HotelData
{
public string HotelCode { get; set; }
public MessageDetail Message { get; set; }
}
public class MessageDetail
{
public string MessageType { get; set; }
public string MessageContent { get; set; }
}
- WCFの呼び出し方法
WCF(Windows Communication Foundation)は、マイクロソフトが開発したデータ通信をサポートするアプリケーションフレームワークです。.NET Remoting、Webサービス、Socketメカニズム、HTTP、FTP関連技術を統合しています。
WCFのアーキテクチャ:
- 契約(コントラクト)
- データ契約:サービスのパラメータ
- メッセージ契約:SOAPプロトコル固有のメッセージ部分
- サービス契約:サービスのメソッド
- ポリシーとバインディング:セキュリティやその他の条件の設定、伝送方法とエンコーディングの指定
- サービスの実行
- 制限動作:処理されるメッセージ数の制御
- エラー動作:内部エラー発生時の処理
- メタデータ動作:メタデータの提供方法
- インスタンス動作:実行可能なサービスインスタンスの数
- トランザクション動作:トランザクションの処理
- スケジュール動作:WCFがメッセージを処理する方法の制御
- メッセージ転送
- トランスポートチャネル:ネットワークからのメッセージの読み書き(HTTP、名前付きパイプ、TCP、MSMQなど)
- プロトコルチャネル:メッセージヘッダーの読み書きによるメッセージプロトコルの実装(WS-Security、WS-Reliabilityなど)
- ホスティングとアクティベーション
- サービスホスト:WCFサービスのライフサイクルとコンテキストを管理し、開始と停止を担当
WCFとWebサービスの違い:
-
Webサービス:業界標準であり、XMLを使用してデータを表現します。SOAPプロトコルを使用して分散環境でのデータ交換を実現します。WSDLを使用してサービスインターフェースを記述します。
-
WCF:ASP.NET Webサービスの進化版であり、Webサービスの業界標準とコアプロトコルをサポートします。XML形式だけでなく、独自のフォーマッターも提供します。
WCFの基本的な概念:
- 契約(コントラクト)
- アドレス
- エンドポイント
- バインディング(Binding)
- ホスティング