Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向Silverlight(3.0)添加Web服务时引用不明确?_C#_Silverlight_Silverlight 3.0 - Fatal编程技术网

C# 向Silverlight(3.0)添加Web服务时引用不明确?

C# 向Silverlight(3.0)添加Web服务时引用不明确?,c#,silverlight,silverlight-3.0,C#,Silverlight,Silverlight 3.0,当我添加Web服务时,我开始出现以下所有错误: “Stream”是“System.IO.Stream”和“MultiSelectFileUploader.ServiceReference.Stream”之间的不明确引用。 当我只有GetFiles()时,这并没有发生。我可以继续将我的Streams更改为System.IO.Stream,但当我尝试传递到UploadFiles()时,我会得到一个错误,即它不是ServiceReference.Stream。谢谢你的帮助 这是我的网站服务 using

当我添加Web服务时,我开始出现以下所有错误:

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

当我只有GetFiles()时,这并没有发生。我可以继续将我的Streams更改为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);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Services;
使用System.IO;
名称空间MultiSelectFileUploader.Web
{
/// 
///文件服务的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
//要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。
//[System.Web.Script.Services.ScriptService]
公共类文件服务:System.Web.Services.WebService
{
[网络方法]
公共列表GetFiles()
{
列表l=新列表();
foreach(FileInfo-fi-in(新的DirectoryInfo(Server.MapPath(“~/Temp/”)).GetFiles())
l、 增加(金融机构名称);
返回l;
}
[网络方法]
公共无效上载文件(字符串文件名、流文件)
{
字符串filepath=AppDomain.CurrentDomain.BaseDirectory+@“Temp\”;
如果(!Directory.Exists(filepath)){Directory.CreateDirectory(filepath);}
WriteFile(file,file.Create(Context.Server.MapPath(“~/Temp/”+filename));
}
私有void WriteFile(流、文件流fs)
{
int字节读取;
字节[]缓冲区=新字节[4096];
while((bytesRead=stream.Read(buffer,0,buffer.Length))!=0)
fs.Write(缓冲区,0,字节读取);
}
}
}

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

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


您得到的
不是ServiceReference.Stream
可能是因为您将某个地方的声明更改为
System.IO.Stream
,而实际上需要一个
MultiSelectFileUploader.ServiceReference.Stream

因为您有两个不同版本的
Stream
(一个在
System.IO
中,另一个在
MultiSelectFileUploader.serviceference
中),您需要有一种区分它们的方法

此外,您现在遇到的错误是因为您没有在任何地方使用
MultiSelectFileUploader.ServiceReference
命名空间,因此您的代码不知道
MultiSelectFileUploader.ServiceReference.Stream

我建议为
System.IO
MultiSelectFileUploader.ServiceReference
使用别名,如下所示:

using IO = System.IO;
using Uploader = MultiSelectFileUploader.ServiceReference;
然后使用别名指定您正在使用的流,如下所示(假设您正在使用MultiSelectFileUploader.ServiceReference.stream类):


它以前没有发生的原因是GetFiles没有对流类的显式引用。

流在ASMX服务中不受支持。你必须使用WCF。

你有自己的
类吗?不,不是故意的。在我的xaml.cs中,我可以做ServiceReference.Stream,但我自己没有这样做。(我想它之所以放在那里,是因为我在传递给UploadFiles()的参数中引用了流)。
private void WriteFile(Uploader.Stream stream, FileStream fs)
{
    ...
}