ユーザーが「ファイルのアップロード」ボタンをクリックした後、Webページのフロントエンドから、サーバーで実行される処理のためにHttpPostedFileBaseをwcfサービスに送信する必要があります。最初にサービス コントラクトで HttpPostedFileBase を使用しましたが、機能しませんでした。次に、HttpPostedFileBase をデータ コントラクトに入れようとしましたが、それでも機能しませんでした。私はその問題を解決するのに 2 日間苦労しました。今ここにアプローチがあります:
サービス契約:
[ServiceContract]
public interface IFileImportWcf
{
[OperationContract]
string FileImport(byte[] file);
}
そして、バイト[]をストリームに、またはその逆に変換するこれら2つの方法を見つけました。
public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}
コントローラーで:
[HttpPost]
public ActionResult Import(HttpPostedFileBase attachment)
{
//convert HttpPostedFileBase to bytes[]
var binReader = new BinaryReader(attachment.InputStream);
var file = binReader.ReadBytes(attachment.ContentLength);
//call wcf service
var wcfClient = new ImportFileWcfClient();
wcfClient.FileImport(file);
}
私の質問は次のとおりです: HttpPostedFileBase を wcf サービスに送信するより良い方法は何ですか?