-1

画像をWebサイトにアップロードする機能を設計しようとしています。ASP.NET 3.5、C#、およびWCFを使用しています。

私は次のことを達成するように求められました:

1)アップローダーをWebサービスにします
。2)ファイルがアップロードされたら、進行状況の更新をユーザーに返します。
3)他の関連するユーザーが選択したオプションをデータベースに記録します。

そこで、以下のサービス契約を使用してWCFWebクライアントを作成することから始めました。

IService.UploadPictures(HttpRequest request);

private UploadServiceClient upload;

protected void Page_Load(object sender, EventArgs e)
{

      upload = new UploadServiceClient();
      upload.UploadPictures(Request.Files);

}

コンパイルすると、次のエラーが発生します。

タイプ「System.Web.HttpRequest」はシリアル化できません。DataContractAttributeでマークを付け、シリアル化するすべてのメンバーをDataMemberAttribute属性でマークすることを検討してください。

そこで、サービス契約に戻り、[OperationContract]を[DataContract]に変更しましたが、変更すると同じエラーが発生しました。

誰かが私が間違っていることを親切に教えてくれ、最善の前進方法の例を教えてもらえますか?

御時間ありがとうございます。

4

2 に答える 2

2

HttpRequestのようなものをWCFパラメーターとして使用することはできません。エラーメッセージにはすべてが記載されています。HttpRequestはシリアル化できません。WCFを使用するには、型をシリアル化できる必要があります。

また、覚えておく必要があります。ここでは、オブジェクトインスタンスをメソッドに渡すだけではありません。実際に行っているのは、WCFランタイムにリクエスト(呼び出すメソッド名と渡されるすべてのパラメーター)をシリアル化させることです。メッセージ(電子メールまたはxmlファイルを考えてください)、サーバーに送信し、そこでデシリアライズして、指定されたデータ型(DataContractで定義されている)の新しいコピーを作成し、それを使用して何かを実行します。

WCFサービスは、たとえばNTサービスまたはコンソールアプリで実行するなど、自己ホスト型である可能性があります。そのような状況ではHttpRequestを使用できません。

ソリューションを確実に再設計する必要があります-WCFストリーミングにチェックインしてファイルをWCFにアップロードするか(グーグルで検索-ヒットがたくさん見つかります)、関連情報を渡す別の方法を見つける必要があります(例:ファイル名のリスト)HttpRequestオブジェクトを使用せずにWCFサービスに送信します。

マーク

于 2009-10-16T21:57:57.150 に答える
0

リクエストのパラメータとしてリクエストを送信しています。これはあなたがしたいことではありません。「Request.Files」はファイルの配列であると想定しています。これがアップロードしたいものです。次のようなものです:

IService.UploadPictures(List<SomeFileType> request);
于 2009-10-16T22:07:29.043 に答える