1

動作する WCF サービスがありますが、標準の ADO.net を使用していくつかのストアド プロシージャを呼び出します。

これは、呼び出したストアド プロシージャを DataContracts にマップし、手動で作成してから JSON として返す必要があるため、維持するのが少し面倒で面倒です。

EntityFramework エンティティを返すように WCF サービスを変換したい (そのため、手動でデータ コントラクトのマッピングと作成を続ける必要はありません)。

私のメソッドには次のようなものがあります。

public List<GetStuff_Result> GetStuff(string param1)
{
            ...

            StuffEntities ctx = new DataContracts.StuffEntities();

            List<GetStuff_Result> list = ctx.GetStuff(5463, "test").ToList();

            return list;
}

GetStuff_Result を返すように edmx モデルにストアド プロシージャをセットアップしました (ストアド プロシージャをインポートし、「複合関数の作成」を使用しました)。

これをデバッグしたところ、リストに 2 つの結果が表示されましたが、ブラウザー経由で WCF メソッドが呼び出されると、ブラウザー (クロム) にメッセージが表示されます。

No data received
Unable to load the web page because the server sent no data.
Here are some suggestions:
Reload this web page later.
Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data. 

これを修正する方法、または少なくともなぜそれが起こっているのか誰か教えてもらえますか?

注 (1): edmx ファイルを右クリックし、遅延読み込みを無効にしました。

注 (2): DbContext ジェネレーターをセットアップしました

注 (3): WebMessageFormat.Json の応答形式を使用します。

ありがとう

4

3 に答える 3

1

1) アプリケーションを展開する前に、WCF テスト クライアントでアプリケーションをテストして、サービス呼び出しが有効かどうかを確認することをお勧めします。

2)それが起こる理由は、直接ストア プロシージャを実行するか、EF で [DataMember]GetStuff_Result クラスのすべての変数に割り当てる必要がある GetStuff_Result で実行するかどうかは実際には問題ではないため、EF ストアド プロシージャはシリアル化されます。結果を自動的にシリアル化するわけではありません。

于 2013-01-30T02:42:58.257 に答える
1

実際、私はこれを行うより良い方法を見つけました

これを使用するように edmx コード ジェネレーターをセットアップできます

WCF をサポートする DbContext (したがって、生成されるオブジェクトには既に DataMember プロパティと DataContract プロパティがあります)

これにより、COLD TOLD が提案したように EF オブジェクトを WCF オブジェクトにマップする必要なく、サービスでオブジェクトを返すことができます。

于 2013-07-05T00:22:11.233 に答える