将 Web 服务添加到 Silverlight (3.0) 时的不明确引用

本文关键字:引用 不明确 服务 Web 添加 Silverlight | 更新日期: 2023-09-27 18:36:26

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

"Stream"

是"System.IO.Stream"和"MultiSelectFileUploader.ServiceReference.Stream"之间的模糊引用

当我只有 GetFiles() 时,这并没有发生。我可以继续将我的流更改为System.IO.Stream,但是当我尝试传递给UploadFiles()时,我收到错误,它不是ServiceReference.Stream。感谢您的协助。

这是我的网络服务...

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);
        }
    }
}

将 Web 服务添加到 Silverlight (3.0) 时的不明确引用

ASMX 服务不支持流式处理。您必须使用 WCF。

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

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

您可能之所以isn't a ServiceReference.Stream,可能是因为您将声明更改为System.IO.Stream实际上需要MultiSelectFileUploader.ServiceReference.Stream的位置。

由于您有两个不同版本的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 类。