通信制御機能
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-[[戻る>機能一覧]]
--[[機能一覧 - フレームワーク]]
--[[エンタープライズ・システム開発基盤機能>機能一覧 - エ...
--[[対応する処理方式と、そのサンプル - V1系>機能一覧 - 対...
*目次 [#oe1075ce]
#contents
*概要 [#h386f2a1]
通信制御機能は、
-C/S3層、Web3層システム開発で必要となるサービス インター...
-分散オブジェクト的な機能をHTTP, TCP/IPなどの通信プロトコ...
-.NET以外の異種開発技術との連携も別途、(汎用/個別)[[サ...
http://www.slideshare.net/daisukenishino/open-0150/7
*特徴 [#m143ed95]
標準のP/B/D層の3層構成の中に、P層/B層呼び出しのアドインと...
これによりP層 → B層のメソッド呼び出しをネットワーク経由(...
-通信処理を隠蔽することで、業務処理の実装に専念することが...
-P層/B層呼び出しの引数・戻り値は自動的にBinary serialize ...
-これにより3層方式のアプリケーションを2層方式と同様の、高...
http://www.slideshare.net/daisukenishino/open-0150/8
*詳細 [#q5416506]
**方式 [#w3e41e49]
***リモート呼出し [#ue51365d]
下記は、Webサービスをプロトコルに使用する場合の例であり、
#ref(CC_remote.png,left,nowrap,処理方式(ネットワーク経由...
-クライアント側で、使用するプロトコルは、~
「サービス論理名」をキーにして「プロトコル用 名前解決機能...
--これにより、実際に使用する「サービス ゲートウェイ内のプ...
--プロキシに指定するアドレスは、「アドレス用 名前解決機能...
-なお、サーバ側で使用する、呼出し先のモジュールは、同様に...
「サービス論理名」をキーにして「インプロセス用 名前解決機...
-各「名前解決機能」で使用する「名前解決定義」は、~
XMLのフォーマットにて情報を定義する。
-使用するプロトコルが変われば、上記の
--「サービス ゲートウェイ内のプロキシ」や、
--「サービス インターフェイス」などの
>通信制御基盤の実装も変わってくる。
--クライアント、サーバのユーザ プログラムには、影響を与え...
通信制御基盤は、要件に合わせて、追加実装することが可能で...
***インプロセス呼出し [#o7769cd1]
クライアント プログラムからネットワークを経由しないで~
「インプロセス呼出し」をする場合は、以下のような処理方式...
-「インプロセス呼出し」の場合、使用するプロトコルは、「イ...
-この場合、実際に使用する「サービス ゲートウェイ内のプロ...
「サービス インターフェイス」上で使用されたものと同じ「イ...
#ref(CC_inprocess.png,left,nowrap,処理方式(インプロセス...
**構成要素 [#f1171662]
***サービス ゲートウェイ [#a417c185]
-「サービス論理名」をキーにして、呼び出し先プロトコルへの...
-プロトコル = インプロセス呼び出しの場合、
++呼び出しモジュール(アセンブリ、クラス)への名前解決を...
++レイトバインドを使用して、B層の既定のメソッドを呼出す。~
++レイトバインド時の例外処理を実行する。~
TargetInvocationExceptionをハンドルしInnerExceptionをリス...
-プロトコル = インプロセス呼び出し以外の場合、
++呼び出し先アドレスへの名前解決を行う~
このコードブロックはクライアントAPIのタイプ毎に用意すると...
++呼び出しには、プロトコル指定のプロキシを使用する。
++引数オブジェクトから、バイト配列へシリアライズする。
++タイムアウト、認証情報、HTTPプロキシ(ゲートウェイ).et...
++プロキシを使用した同期呼出し ~ 戻り値の受け取り。
++引数のバイト配列から、引数オブジェクトへデシリアライズ...
++タイプ別の[[例外処理>#w1e9c318]]を実行する。
***サービス インターフェイス [#rc81b006]
各プロトコルにおけるテンプレートを使用して実装する~
(TCP/IP、RPC、Webサービス、WCFなどがある)。
+「サービス論理名」をキーにして、~
呼び出しモジュール(アセンブリ、クラス)への名前解決を行...
+引数のバイト配列から、引数オブジェクトへデシリアライズす...
なお、この際、必要になる型情報は、サービス インターフェイ...
ローカルに配置しておくことで自動的に取り込むことができる。
+[[前述>#a417c185]]と同様、
++インプロセス呼び出しを行う。
++タイプ別の[[例外処理>#w1e9c318]]を実行する。
+[[サービス ゲートウェイ>#a417c185]]に結果を返す。
***名前解決機能 [#n0b5f1e9]
名前解決機能として、
-プロトコル、アドレスへの名前解決を行う、~
「プロトコル名前解決サービス」 (ProtocolNameService)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TMD[
<!ELEMENT TMD (Prop*, Url*, Transmission*)>
<!ELEMENT Url EMPTY><!ELEMENT Prop EMPTY><!ELEMENT Tran...
<!ATTLIST Url id ID #REQUIRED value CDATA #REQUIRED>
<!ATTLIST Prop id ID #REQUIRED value CDATA #REQUIRED>
<!ATTLIST Transmission id ID #REQUIRED protocol (1 | 2)...
url CDATA #IMPLIED url_ref IDREF #IMPLIED timeout CDA...
]>
<!-- idの先頭には、数字を使用できない。 --><!-- protocol...
<TMD>
<!-- マスタ データ -->
<!-- 接続オプション(プロパティ:必要に応じて) -->
<Prop id="prop_a" value="aaa=AAA;bbb=BBB;ccc=CCC;"/>
<!-- 接続オプション(URL:必要に応じて) -->
<Prop id="url_a" value="http://xxx/Service.asmx "/>
<!-- 接続先 データ -->
<!-- インプロセス -->
<Transmission id="testInProcess" protocol="1"/>
<!-- Webサービス -->
<Transmission id="testWebSrv1" protocol="2" url="http:...
<Transmission id="testWebSrv2" protocol="2" url_ref="u...
</TMD>
-呼び出しモジュール(アセンブリ、クラス)への名前解決を行...
「インプロセス名前解決サービス」 (InProcessNameService)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TMD[
<!ELEMENT TMD (Transmission*)> <!ELEMENT Transmission ...
<!ATTLIST Transmission id ID #REQUIRED assemblyName CD...
]>
<!-- idの先頭には、数字を使用できない。 -->
<TMD>
<Transmission id="testInProcess" assemblyName="WSServe...
className="WSServer_sample.Business.Laye...
<Transmission id="testWebService" assemblyName="WSServ...
className="WSServer_sample.Business.Laye...
</TMD>
の2つのモジュールが存在する。
上記の2つの名前解決定義は、app.configにパスを指定する。
-FxXMLTMProtocolDefinitionパラメタには、~
「呼び出し先(プロトコル、アドレス)」の名前解決定義
-FxXMLTMInProcessDefinitionパラメタには、~「呼び出しモジ...
***例外処理 [#w1e9c318]
例外については、全ての例外がシリアル化可能になっていない...
「業務例外」、「システム例外」、「フレームワーク例外」、...
正常系の戻り値で返す(このため、一部データ欠損が発生する...
-業務例外(BusinessApplicationException)は正常系で返す(...
-システム例外(BusinessSystemException)は正常系で返す(...
-フレームワーク例外(FrameworkException)は正常系で返す(...
-その他、一般的な例外(Exception)は正常系で返す(クライ...
**サポートする通信テクノロジ [#se3ed231]
***インプロセス呼び出し [#k04ccda3]
レイトバインドを使用したインプロセスのメソッド呼び出し。
***ASP.NET Web Service [#zf25f1cf]
-HTTP
--SOAP 1.1 & 1.2
***WCF [#z0d0989f]
-HTTP
--basicHttpBinding~
---WS-I Basic Profile 1.1 に準拠
--wsHttpBinding~
---WS-ReliableMessaging、WS-Security を実装します。
---メッセージ エンコーディングは Text/XML エンコーディング
-TCP
--netTcpBinding
---メッセージ セキュリティと認証用 Windows セキュリティ
---メッセージ配信用 TCP、およびバイナリ メッセージ エンコ...
-Bindingの設定例~
https://github.com/OpenTouryoProject/OpenTouryo/blob/deve...
***ASP.NET Web API [#ge9aa975]
対応未定。
**透過性 [#l921963c]
http://www.slideshare.net/daisukenishino/open-0150/9
***位置透過性 [#z3628924]
定義による呼び出し先の変更が可能。
-インプロセス呼び出し
-リモート呼び出し(アドレス指定)
***規模透過性 [#a84e62cf]
スケールアウト(垂直・水平分散)が可能。
***異種透過性 [#b5ff466d]
.NET以外の異種開発技術との連携も可能。
別途、別途、(汎用/個別)[[サービス・インターフェイス]]を...
*移行時 [#v4d269ae]
**バージョン、x86, 64間のバイナリ転送 [#f5772ca6]
***バージョン [#ea818437]
通信制御部品で.NETオブジェクトのバイナリ転送をしているの...
異なる.NETバージョン間の通信に問題がないか?ですが、
-.NET Framework 4.5 のアプリケーションの互換性~
http://msdn.microsoft.com/ja-jp/library/hh367887(v=vs.110...
--SoapFormatterクラスについては、バージョン間の互換性が保...
--代わりに、System.Runtime.Serialization.Formatters.Binar...
および System.Runtime.Serialization.NetDataContractSerial...
-バージョン トレラントなシリアル化~
https://msdn.microsoft.com/ja-jp/library/vstudio/ms229752...
--バージョン トレラントなシリアル化 (VTS: Version Toleran...
.NET Framework 2.0 で導入された機能セットで、シリアル化可...
--具体的には、VTS 機能が、ジェネリック型を含め、Serializa...
--VTS を使用すると、他のバージョンの型との互換性を失うこ...
とあるので問題はなさそうです。
***x86, 64間 [#fcf48397]
以下にIntPtrなどを使用していなければ問題無い旨が書かれて...
- 64bit対応 - マイクロソフト系技術情報 Wiki > .NET > 100...
https://techinfoofmicrosofttech.osscons.jp/index.php?64bi...
**検証用サンプル [#baa829a0]
&ref(TestBinaryFormatter.zip);
下記、添付画像のように、x86、x64切り替えて検証しました。~
TargetFramework(.net version)を切り替えてテストしてもイイ...
#ref(TestBinaryFormatter.png,left,nowrap,x86、x64切り替え...
WOW64上でホストされるx86のプロセスは、~
タスクマネージャー上でプロセス名の後ろに「*32」が~
付与されるので、これを確認しながらテストしてみて下さい。
*参考 [#sb715768]
**ライブラリ [#a2179a64]
https://github.com/OpenTouryoProject/OpenTouryo/tree/deve...
**SlideShare [#g1fccd89]
-http://www.slideshare.net/daisukenishino/open-0150/6
-http://www.slideshare.net/daisukenishino/open-0150/7
-http://www.slideshare.net/daisukenishino/open-0150/8
-http://www.slideshare.net/daisukenishino/open-0150/9
終了行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-[[戻る>機能一覧]]
--[[機能一覧 - フレームワーク]]
--[[エンタープライズ・システム開発基盤機能>機能一覧 - エ...
--[[対応する処理方式と、そのサンプル - V1系>機能一覧 - 対...
*目次 [#oe1075ce]
#contents
*概要 [#h386f2a1]
通信制御機能は、
-C/S3層、Web3層システム開発で必要となるサービス インター...
-分散オブジェクト的な機能をHTTP, TCP/IPなどの通信プロトコ...
-.NET以外の異種開発技術との連携も別途、(汎用/個別)[[サ...
http://www.slideshare.net/daisukenishino/open-0150/7
*特徴 [#m143ed95]
標準のP/B/D層の3層構成の中に、P層/B層呼び出しのアドインと...
これによりP層 → B層のメソッド呼び出しをネットワーク経由(...
-通信処理を隠蔽することで、業務処理の実装に専念することが...
-P層/B層呼び出しの引数・戻り値は自動的にBinary serialize ...
-これにより3層方式のアプリケーションを2層方式と同様の、高...
http://www.slideshare.net/daisukenishino/open-0150/8
*詳細 [#q5416506]
**方式 [#w3e41e49]
***リモート呼出し [#ue51365d]
下記は、Webサービスをプロトコルに使用する場合の例であり、
#ref(CC_remote.png,left,nowrap,処理方式(ネットワーク経由...
-クライアント側で、使用するプロトコルは、~
「サービス論理名」をキーにして「プロトコル用 名前解決機能...
--これにより、実際に使用する「サービス ゲートウェイ内のプ...
--プロキシに指定するアドレスは、「アドレス用 名前解決機能...
-なお、サーバ側で使用する、呼出し先のモジュールは、同様に...
「サービス論理名」をキーにして「インプロセス用 名前解決機...
-各「名前解決機能」で使用する「名前解決定義」は、~
XMLのフォーマットにて情報を定義する。
-使用するプロトコルが変われば、上記の
--「サービス ゲートウェイ内のプロキシ」や、
--「サービス インターフェイス」などの
>通信制御基盤の実装も変わってくる。
--クライアント、サーバのユーザ プログラムには、影響を与え...
通信制御基盤は、要件に合わせて、追加実装することが可能で...
***インプロセス呼出し [#o7769cd1]
クライアント プログラムからネットワークを経由しないで~
「インプロセス呼出し」をする場合は、以下のような処理方式...
-「インプロセス呼出し」の場合、使用するプロトコルは、「イ...
-この場合、実際に使用する「サービス ゲートウェイ内のプロ...
「サービス インターフェイス」上で使用されたものと同じ「イ...
#ref(CC_inprocess.png,left,nowrap,処理方式(インプロセス...
**構成要素 [#f1171662]
***サービス ゲートウェイ [#a417c185]
-「サービス論理名」をキーにして、呼び出し先プロトコルへの...
-プロトコル = インプロセス呼び出しの場合、
++呼び出しモジュール(アセンブリ、クラス)への名前解決を...
++レイトバインドを使用して、B層の既定のメソッドを呼出す。~
++レイトバインド時の例外処理を実行する。~
TargetInvocationExceptionをハンドルしInnerExceptionをリス...
-プロトコル = インプロセス呼び出し以外の場合、
++呼び出し先アドレスへの名前解決を行う~
このコードブロックはクライアントAPIのタイプ毎に用意すると...
++呼び出しには、プロトコル指定のプロキシを使用する。
++引数オブジェクトから、バイト配列へシリアライズする。
++タイムアウト、認証情報、HTTPプロキシ(ゲートウェイ).et...
++プロキシを使用した同期呼出し ~ 戻り値の受け取り。
++引数のバイト配列から、引数オブジェクトへデシリアライズ...
++タイプ別の[[例外処理>#w1e9c318]]を実行する。
***サービス インターフェイス [#rc81b006]
各プロトコルにおけるテンプレートを使用して実装する~
(TCP/IP、RPC、Webサービス、WCFなどがある)。
+「サービス論理名」をキーにして、~
呼び出しモジュール(アセンブリ、クラス)への名前解決を行...
+引数のバイト配列から、引数オブジェクトへデシリアライズす...
なお、この際、必要になる型情報は、サービス インターフェイ...
ローカルに配置しておくことで自動的に取り込むことができる。
+[[前述>#a417c185]]と同様、
++インプロセス呼び出しを行う。
++タイプ別の[[例外処理>#w1e9c318]]を実行する。
+[[サービス ゲートウェイ>#a417c185]]に結果を返す。
***名前解決機能 [#n0b5f1e9]
名前解決機能として、
-プロトコル、アドレスへの名前解決を行う、~
「プロトコル名前解決サービス」 (ProtocolNameService)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TMD[
<!ELEMENT TMD (Prop*, Url*, Transmission*)>
<!ELEMENT Url EMPTY><!ELEMENT Prop EMPTY><!ELEMENT Tran...
<!ATTLIST Url id ID #REQUIRED value CDATA #REQUIRED>
<!ATTLIST Prop id ID #REQUIRED value CDATA #REQUIRED>
<!ATTLIST Transmission id ID #REQUIRED protocol (1 | 2)...
url CDATA #IMPLIED url_ref IDREF #IMPLIED timeout CDA...
]>
<!-- idの先頭には、数字を使用できない。 --><!-- protocol...
<TMD>
<!-- マスタ データ -->
<!-- 接続オプション(プロパティ:必要に応じて) -->
<Prop id="prop_a" value="aaa=AAA;bbb=BBB;ccc=CCC;"/>
<!-- 接続オプション(URL:必要に応じて) -->
<Prop id="url_a" value="http://xxx/Service.asmx "/>
<!-- 接続先 データ -->
<!-- インプロセス -->
<Transmission id="testInProcess" protocol="1"/>
<!-- Webサービス -->
<Transmission id="testWebSrv1" protocol="2" url="http:...
<Transmission id="testWebSrv2" protocol="2" url_ref="u...
</TMD>
-呼び出しモジュール(アセンブリ、クラス)への名前解決を行...
「インプロセス名前解決サービス」 (InProcessNameService)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TMD[
<!ELEMENT TMD (Transmission*)> <!ELEMENT Transmission ...
<!ATTLIST Transmission id ID #REQUIRED assemblyName CD...
]>
<!-- idの先頭には、数字を使用できない。 -->
<TMD>
<Transmission id="testInProcess" assemblyName="WSServe...
className="WSServer_sample.Business.Laye...
<Transmission id="testWebService" assemblyName="WSServ...
className="WSServer_sample.Business.Laye...
</TMD>
の2つのモジュールが存在する。
上記の2つの名前解決定義は、app.configにパスを指定する。
-FxXMLTMProtocolDefinitionパラメタには、~
「呼び出し先(プロトコル、アドレス)」の名前解決定義
-FxXMLTMInProcessDefinitionパラメタには、~「呼び出しモジ...
***例外処理 [#w1e9c318]
例外については、全ての例外がシリアル化可能になっていない...
「業務例外」、「システム例外」、「フレームワーク例外」、...
正常系の戻り値で返す(このため、一部データ欠損が発生する...
-業務例外(BusinessApplicationException)は正常系で返す(...
-システム例外(BusinessSystemException)は正常系で返す(...
-フレームワーク例外(FrameworkException)は正常系で返す(...
-その他、一般的な例外(Exception)は正常系で返す(クライ...
**サポートする通信テクノロジ [#se3ed231]
***インプロセス呼び出し [#k04ccda3]
レイトバインドを使用したインプロセスのメソッド呼び出し。
***ASP.NET Web Service [#zf25f1cf]
-HTTP
--SOAP 1.1 & 1.2
***WCF [#z0d0989f]
-HTTP
--basicHttpBinding~
---WS-I Basic Profile 1.1 に準拠
--wsHttpBinding~
---WS-ReliableMessaging、WS-Security を実装します。
---メッセージ エンコーディングは Text/XML エンコーディング
-TCP
--netTcpBinding
---メッセージ セキュリティと認証用 Windows セキュリティ
---メッセージ配信用 TCP、およびバイナリ メッセージ エンコ...
-Bindingの設定例~
https://github.com/OpenTouryoProject/OpenTouryo/blob/deve...
***ASP.NET Web API [#ge9aa975]
対応未定。
**透過性 [#l921963c]
http://www.slideshare.net/daisukenishino/open-0150/9
***位置透過性 [#z3628924]
定義による呼び出し先の変更が可能。
-インプロセス呼び出し
-リモート呼び出し(アドレス指定)
***規模透過性 [#a84e62cf]
スケールアウト(垂直・水平分散)が可能。
***異種透過性 [#b5ff466d]
.NET以外の異種開発技術との連携も可能。
別途、別途、(汎用/個別)[[サービス・インターフェイス]]を...
*移行時 [#v4d269ae]
**バージョン、x86, 64間のバイナリ転送 [#f5772ca6]
***バージョン [#ea818437]
通信制御部品で.NETオブジェクトのバイナリ転送をしているの...
異なる.NETバージョン間の通信に問題がないか?ですが、
-.NET Framework 4.5 のアプリケーションの互換性~
http://msdn.microsoft.com/ja-jp/library/hh367887(v=vs.110...
--SoapFormatterクラスについては、バージョン間の互換性が保...
--代わりに、System.Runtime.Serialization.Formatters.Binar...
および System.Runtime.Serialization.NetDataContractSerial...
-バージョン トレラントなシリアル化~
https://msdn.microsoft.com/ja-jp/library/vstudio/ms229752...
--バージョン トレラントなシリアル化 (VTS: Version Toleran...
.NET Framework 2.0 で導入された機能セットで、シリアル化可...
--具体的には、VTS 機能が、ジェネリック型を含め、Serializa...
--VTS を使用すると、他のバージョンの型との互換性を失うこ...
とあるので問題はなさそうです。
***x86, 64間 [#fcf48397]
以下にIntPtrなどを使用していなければ問題無い旨が書かれて...
- 64bit対応 - マイクロソフト系技術情報 Wiki > .NET > 100...
https://techinfoofmicrosofttech.osscons.jp/index.php?64bi...
**検証用サンプル [#baa829a0]
&ref(TestBinaryFormatter.zip);
下記、添付画像のように、x86、x64切り替えて検証しました。~
TargetFramework(.net version)を切り替えてテストしてもイイ...
#ref(TestBinaryFormatter.png,left,nowrap,x86、x64切り替え...
WOW64上でホストされるx86のプロセスは、~
タスクマネージャー上でプロセス名の後ろに「*32」が~
付与されるので、これを確認しながらテストしてみて下さい。
*参考 [#sb715768]
**ライブラリ [#a2179a64]
https://github.com/OpenTouryoProject/OpenTouryo/tree/deve...
**SlideShare [#g1fccd89]
-http://www.slideshare.net/daisukenishino/open-0150/6
-http://www.slideshare.net/daisukenishino/open-0150/7
-http://www.slideshare.net/daisukenishino/open-0150/8
-http://www.slideshare.net/daisukenishino/open-0150/9
ページ名: