Repository navigation
OTR_ServiceInterface
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
「サービス論理名」を渡すだけで 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の振替など)。
| 定義ファイル | 設定キー | 内容 |
|---|---|---|
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 定義ファイルに共通の作法)。
Web Forms などのサンプルは 3 層(Web サービス)に依存している。不要ならサンプルの変形の ws-decouple で切り離す。
- スキル
opentouryo-transmissionを使わせる。 - エージェントが REST API をこの仕組みで呼ぼうとしていないか(あるいはその逆)を確認する。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。