Visual Studio 2008からRDSサービスを作成(4)(失敗編)
前回の「Visual Studio 2008からRDSサービスを作成(3)」ではプロジェクトの新規作成時に指定したテンプレート『DSS Service(2.0)』にあらかじめ準備されていた「Get」メッセージを使用してみました。
今回はテンプレートに含まれてはいませんが、RDSに定義されているReplaceという値を置き換えるメッセージをプログラム上に追加する方法をやってみます。
これにはポートの追加という手順が必要になってきます。
現在、試行錯誤の状態なので、これは失敗した例をのせている点にご注意下さい。
- 事前準備
プロジェクトの新規作成からマイテンプレートで『DSS Service(2.0)』を選択してプロジェクト名を入力後、OKボタンを押すと
- プロジェクト名Types.cs
- プロジェクト名.cs
- プロジェクト名.manifest.xml
の3種類のファイルが作成されます。
今回は「AddPortTest」というプロジェクト名にしました。
- PortSetの追加
プロジェクト名Type.csの中の「プロジェクト名Operations関数」を以下のように書き換えます。
- 修正前
/// <summary> /// AddPortTest main operations port /// </summary> [ServicePort] public class AddPortTestOperations : PortSet<DsspDefaultLookup, DsspDefaultDrop, Get, Subscribe> { }
- 修正後
/// <summary> /// AddPortTest main operations port /// </summary> [ServicePort] public class AddPortTestOperations : PortSet<DsspDefaultLookup, DsspDefaultDrop, Get, Subscribe, Replace> { }
- Replaceクラスの作成
プロジェクト名Type.csにReplaceクラスを追加します。
/// <summary> /// AddPortTest Replace operation /// </summary> public class Replace : Replace<GetRequestType, PortSet<AddPortTestState, Fault>> { }
- ハンドラの追加
プロジェクト名.csにReplaceのハンドラを追加します。
/// <summary> /// Replace Handler /// </summary> /// <param name ="replace"></param> /// <reteuns></returns> [ServiceHandler(ServiceHandlerBehavior.Exclusive)] public virtual IEnumerator<ITask> ReplaceHandler(Replace replace) { _state = replace.Body; replace.ResponsePort(DefaultReplaceResponseType.Instance); yield break; }
そしてビルドが正常終了したら、VPLを起動して上記で作成したサービス(今回はAddPortTest)をService欄から呼び出し、Dataブロックと接続してみる予定だったのですが、ここでコンパイルエラーの発生です。。。
- エラーメッセージ
- 73行目(_state = replace.Body;の部分)
型'Microsoft.Dss.ServiceModel.Dssp.GetRequestType'を型'AddPortTest.AddPortTestState'に暗黙的に変換できません。
-
- 74行目(replace.ResponsePort(DefaultReplaceResponseType.Instance);の部分)
実行不可能なメンバ
'Microsoft.Dss.ServiceModel.Dssp.DsspOperation>.ResponsePort'をメソッドのように使用することはできません。
これから原因、追究します。