Skip to content

OTR_ServiceInterface

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

通信制御(サービス・インターフェイス)

  • TOP > 使い方 > 通信制御(サービス・インターフェイス)

概要

「サービス論理名」を渡すだけで B 層を呼べるようにする機能。呼び出し先が同一プロセス内か、Web サービス越しかを、呼び出し側のコードから隠す。

  • 3 層 C/S(リッチクライアント → Web サービス → B 層)を、2 層と同じ書き方で実装できる。
  • 同じ論理名のまま、定義ファイルを直すだけで、インプロセスとリモートを切り替えられる。
  • リモート呼び出しは net48 専用(net10.0 では未実装)。
  • REST の Web API(HTTP+JSON)とは別の仕組みである(Web API)。

詳細

呼び出し

CallController cctrl = new CallController(this.UserInfo);
TestReturnValue rv = (TestReturnValue)cctrl.Invoke("testWebService", parameterValue);
// 非同期版:InvokeAsync(serviceName, parameterValue)
  • Invoke / InvokeAsync の引数は 2 つだけで、分離レベルは渡せない。3 層 C/S では分離レベルはサーバ側の関心事で、サーバ側で決める(分離レベル User の振替など)。

2 つの定義ファイル

定義ファイル 設定キー 内容
TMProtocolDefinition.xml FxXMLTMProtocolDefinition 論理名ごとのプロトコル(インプロセス/リモート)と、リモートの URL・タイムアウト
TMInProcessDefinition.xml FxXMLTMInProcessDefinition 論理名ごとの B 層のアセンブリ名・クラス名

2 つで 1 つの機能で、片方だけでは成立しない。

プロトコル 解決の流れ
1(インプロセス) クライアントの TMInProcessDefinition でクラスを引き、同一プロセスで直接呼ぶ
2〜5(リモート) クライアントの TMProtocolDefinition の URL へ送り、サーバ(サービス・インターフェイス)の TMInProcessDefinition でクラスを引いて B 層を呼ぶ
  • リモートの種類:2 = ASP.NET SOAP、3 = WCF basicHttpBinding(2・3 は終息)、4 = WCF netTcpBinding、5 = ASP.NET Web API。
  • TMInProcessDefinition.xml はクライアントとサーバの 2 か所にある(同名・別物)。リモートでも使う論理名は、両方に同じ id を登録する。
  • どちらも DTD を埋め込み、id の先頭に数字を使わない(Open 棟梁の XML 定義ファイルに共通の作法)。

3 層を外したい場合

Web Forms などのサンプルは 3 層(Web サービス)に依存している。不要ならサンプルの変形の ws-decouple で切り離す。

コーディング・エージェントに任せる場合

  • スキル opentouryo-transmission を使わせる。
  • エージェントが REST API をこの仕組みで呼ぼうとしていないか(あるいはその逆)を確認する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally