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