向Silverlight(3.0)添加WebService时的不明确引用?

时间:2012-06-07 15:56:23

标签: c# silverlight silverlight-3.0

当我添加我的WebService时,我开始收到所有这些错误:

'Stream'是'System.IO.Stream'和'MultiSelectFileUploader.ServiceReference.Stream'之间不明确的引用

当我在那里的所有东西都是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);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

ASMX服务不支持流式传输。你必须使用WCF。

答案 1 :(得分:0)

听起来你有两个名为Stream的类,在两个名称空间中,在单独的程序集(DLL)中。

如果你需要在同一个C#类中使用两个名为Stream的类,你最好完全限定你使用它们的类名(还有其他方法,但imho这是最干净的)。

你得到isn't a ServiceReference.Stream大概是因为你在某处改变了声明System.IO.Stream,实际上预计会有MultiSelectFileUploader.ServiceReference.Stream

答案 2 :(得分:0)

由于您有两个不同版本的Stream(一个在System.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类。