0

私は、VB.NET で WCF サービスを実装する任務を負っています。この WCF サービスは、独自の .NET Windows Forms アプリケーションによって使用され、SQL Server データベースからデータを提供します。データはサードパーティ グリッド (Infragistics) に表示されます。

当初、私は ADO.NET を使用し、WCF サービス内の SQL からデータ テーブルまたはデータセットを返すつもりでしたが、インターネット経由でデータ テーブルを返さないように勧める記事を読みすぎました。相互運用性については心配していませんが、プロセスのサイズ/速度が心配です。これにより、linq to sql を使用して、インターネット経由で渡すことができるエンティティ (.dbml) を返すようになりました。

問題:

多くのデータはストアド プロシージャから取得されます。これらのストアド プロシージャは、既存のテーブルの混合一致である結果セットを返すため、どの戻り値の型とも一致しません。(自動生成された型) を返すストアド プロシージャをインポートしましたが、WCF サービスを介してこの型を返そうとすると、トレースログに次のエラーが表示されます。

型 System.Data.Linq.SqlClient.SqlProvider+SingleResult'1[benchmark_prd_colour_findResult] をシリアル化できません。これを DataContractAttribute 属性でマークし、シリアル化するすべてのメンバーを DataMemberAttribute 属性でマークすることを検討してください。型がコレクションの場合は、CollectionDataContractAttribute でマークすることを検討してください。サポートされているその他の型については、Microsoft .NET Framework のドキュメントを参照してください。

結果が特定の既存のテーブルと一致しない場合に、ストアド プロシージャの結果を返すことができるようにするために何をする必要があるか教えてください。

4

1 に答える 1

0

それをVBに翻訳してください!(申し訳ありませんが、タグが表示されませんでした... C#と見なされます)

独自のオブジェクトを作成し、次のようにマークアップします。

[DataContract]
public class MyObject{

//here go all your fields which match whats returned in your stored proc
[DataMember]
public String MyField;
[DataMember]
public int MySecondField;

}

次に、ストアドプロシージャの結果を取得するときに、これを入力します

public MyObject GetResult(){
stored_proc_result result = factory.callProc(); //obviously replace this with whatever you use!
MyObject obj = new MyObject{
 MyField = FieldOne,
 MySecondField = FieldTwo
};
return obj;
}

次に、WCF呼び出しでMyObjectインスタンスを渡すと、機能するはずです。

于 2012-08-01T12:39:35.277 に答える