2011-07-30 20 views
0

REST WCFサービスの添付ファイルとして画像をアップロードしようとしていますが、次のエラーが発生しています。 "パス" C:\ ImageUpload "へのアクセスが拒否されました" このフォルダへの完全なアクセス権を有効にしました。なぜこのエラーが出るのか分かりません。 私はWCFの初心者であり、オンラインリソースから集めたほとんどのコードです。 私のコードに間違いがあった場合にお知らせください。 ここに私のコードです。RESTful WCFサービスの添付ファイルとして画像をアップロードする


REST WCF Service Code: 

[OperationContract] 
[WebInvoke(UriTemplate = "uploadImage/{parameter1}")] 
    void uploadImage(Stream fileStream); 

public void uploadImage(Stream fileStream) 
     { 
      string filePath = @"C:\ImageUpload"; 
      FileStream filetoUpload = new FileStream(filePath, FileMode.Create); 

      byte[] byteArray = new byte[10000]; 
      int bytesRead, totalBytesRead = 0; 

      do 
      { 
       bytesRead = fileStream.Read(byteArray, 0, byteArray.Length); 
       totalBytesRead += bytesRead; 
      } 
      while (bytesRead > 0); 
      filetoUpload.Write(byteArray, 0, byteArray.Length); 
      filetoUpload.Close(); 
      filetoUpload.Dispose(); 
     } 

これは私のテストクライアント・コード(単純な.aspxのWebページ)です

protected void btnUpload_Click(object sender, EventArgs e) 
     { 
      string file = FileUpload1.FileName; 
      RESTService1Client client = new RESTService1Client(); 

      byte[] bytearray = null; 
      string name = ""; 
      if (FileUpload1.HasFile) 
      { 
       name = FileUpload1.FileName; 
       Stream stream = FileUpload1.FileContent; 
       stream.Seek(0, SeekOrigin.Begin); 
       bytearray = new byte[stream.Length]; 
       int count = 0; 
       while (count < stream.Length) 
       { 
        bytearray[count++] = Convert.ToByte(stream.ReadByte()); 
       } 
      } 
      WebClient wclient = new WebClient(); 
      wclient.Headers.Add("Content-Type", "image/jpeg"); 
      client.uploadImage(FileUpload1.FileContent); 
} 
+0

あなたはフルコントロールのユーザーへのアクセスを与えましたか? WCFサービスがそのアカウントで実行されていますか? –

+0

BOth WCFサービスとクライアントは私のローカルシステムにあります。私は "ImageUpload"フォルダのセキュリティタブにあるすべてのユーザーにフルアクセスできました。 – Henry

+0

"Everyone"へのアクセスを試してください。 –

答えて

0

WCFまたはあなたのコードを実行する可能性が何もありません。そのフォルダのアクセス許可がIISプロセスユーザーにとって不十分である可能性は非常に高いです。デフォルトでは、ASP.NETユーザーはネットワークサービスです。

ASP.NETアプリケーション専用の新しいWindowsユーザーを作成してみてください。そのユーザーにアップロードフォルダへの明示的な読み取り/書き込みアクセスを許可します。次に、偽装を使用してASP.NETでそのユーザーを使用させる。 http://www.codeproject.com/Articles/107940/Back-to-Basic-ASP-NET-Runtime-Impersonation

0

のような書き換えサーバー側:

REST WCFサービスコード:

[OperationContract] 
[WebInvoke(UriTemplate = "uploadImage/{parameter1}/{parameter2}")] 
void uploadImage(Stream fileStream, string fileName); 

。など

public void uploadImage(Stream fileStream, string fileName) 
    { 
     string filePath = @"C:\ImageUpload\"; 
     using (FileStream filetoUpload = new FileStream(filePath + fileName, FileMode.Create)) 
     { 
      byte[] byteArray = new byte[10000]; 
      int bytesRead = 0; 

      do 
      { 
       bytesRead = fileStream.Read(byteArray, 0, byteArray.Length); 
       if (bytesRead > 0) 
       { 
        filetoUpload.Write(byteArray, 0, bytesRead); 
       } 
      } 

      while (bytesRead > 0); 
     } 
    } 

とクライアント側:

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if (FileUpload1.HasFile) 
     { 
      RESTService1Client client = new RESTService1Client(); 

      client.uploadImage(FileUpload1.FileContent, Path.GetFileName(FileUpload1.FileName)); 
     } 
} 
+0

私はこれをまったくテストしていませんが、一度削除すると元のコードにいくつかの目障りなバグがありました。 –

+0

HI Jesse、私のためのコードを書いていただきありがとうございます。私はあなたのコードを試して、私は次のエラーが表示されます。 "uploadImageを操作する要求をストリームにするには、その型がStreamの単一のパラメータを持つ必要があります"。このエラーの原因は何ですか?あなたのお時間をありがとうございました。 – Henry

+0

さて、エラーには何が間違っているのか2つのパラメータ(私が追加したfileNameパラメータ)を持つことはできません。別の方法で、クライアントからサーバーへ(またはサーバー上で生成する)ファイル名を取得しようとするかもしれません。 –

関連する問題