2012-06-07 46 views
2

當我加我的WebService我開始所有這些錯誤:向Silverlight(3.0)添加WebService時模糊引用?

「流」是「System.IO.Stream」和「MultiSelectFileUploader.ServiceReference.Stream」

這WASN」之間不明確的引用當我在那裏的時候發生了GetFiles()。我可以繼續並將Streams更改爲System.IO.Stream,但是當我嘗試傳遞給UploadFiles()時,出現錯誤,它不是ServiceReference.Stream。感謝你的幫助。

這裏是我的WebService ......

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.IO; 

namespace MultiSelectFileUploader.Web 
{ 
    /// <summary> 
    /// Summary description for FileService 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class FileService : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public List<string> GetFiles() 
     { 
      List<string> l = new List<string>(); 

      foreach (FileInfo fi in (new DirectoryInfo(Server.MapPath("~/Temp/")).GetFiles())) 
       l.Add(fi.Name); 

      return l; 
     } 

     [WebMethod] 
     public void UploadFiles(string filename, Stream file) 
     { 
      string filepath = AppDomain.CurrentDomain.BaseDirectory + @"Temp\"; 

      if (!Directory.Exists(filepath)) { Directory.CreateDirectory(filepath); } 

      WriteFile(file, File.Create(Context.Server.MapPath("~/Temp/" + filename))); 
     } 

     private void WriteFile(Stream stream, FileStream fs) 
     { 
      int bytesRead; 
      byte[] buffer = new byte[4096]; 

      while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0) 
       fs.Write(buffer, 0, bytesRead); 
     } 
    } 
} 
+0

你有你自己的Stream類嗎? –

+0

不,呃,不是故意的。在我的xaml.cs中,我可以做ServiceReference.Stream,但我自己並沒有這樣做。 (我想不知怎麼它放到了那裏,因爲我在傳遞給UploadFiles()的參數中引用了Stream)。 – Ber53rker

回答

1

流媒體在ASMX服務中不受支持。你必須使用WCF。

+0

+1 ref:http://stackoverflow.com/questions/2903182/wcf-streaming-on-asmx –

0

這聽起來像你有兩個類稱爲物流,在兩個命名空間,在單獨的集(DLL)。

如果您需要在同一個C#類中使用兩個名爲Stream的類,那麼您最好完全限定使用它們的類名(還有其他方法,但這是最簡潔的方法)。

你得到的isn't a ServiceReference.Stream大概是因爲你改變了某個地方的聲明到System.IO.Stream其中實際上MultiSelectFileUploader.ServiceReference.Stream是預期的。

0

由於您有兩個不同版本的StreamSystem.IO中的一個和MultiSelectFileUploader.ServiceReference中的一個),您需要有一種區分它們的方法。

此外,你現在得到的錯誤是因爲你沒有在任何地方使用MultiSelectFileUploader.ServiceReference命名空間,所以你的代碼不知道MultiSelectFileUploader.ServiceReference.Stream類。

我會建議使用別名System.IOMultiSelectFileUploader.ServiceReference,像這樣:

using IO = System.IO; 
using Uploader = MultiSelectFileUploader.ServiceReference; 

,然後使用別名來指定哪些流使用的是,像這樣(你正在使用的MultiSelectFileUploader假設這是.ServiceReference.Stream類):

private void WriteFile(Uploader.Stream stream, FileStream fs) 
{ 
    ... 
} 

之前沒有發生的原因是GetFiles沒有明確的引用Stream類。

相關問題