2

WebService を追加すると、次のすべてのエラーが発生し始めました。

「ストリーム」は、「System.IO.Stream」と「MultiSelectFileUploader.ServiceReference.Stream」の間のあいまいな参照です

私がそこに持っていたのはGetFiles()だけだったとき、これは起こりませんでした。Streams を System.IO.Stream に変更できますが、UploadFiles() に渡そうとすると、ServiceReference.Stream ではないというエラーが表示されます。助けてくれてありがとう。

これが私のWebサービスです...

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

3 に答える 3

1

ASMX サービスではストリーミングはサポートされていません。WCF を使用する必要があります。

于 2012-06-07T16:11:59.277 に答える
0

2つの名前空間、別々のアセンブリ(DLL)にStreamという2つのクラスがあるようです。

同じC#クラスでStreamと呼ばれる両方のクラスを使用する必要がある場合は、それらを使用するクラス名を完全に修飾するのが最善です(他の方法もありますが、これが最もクリーンです)。

isn't a ServiceReference.Streamおそらく、宣言System.IO.Streamを実際に期待される場所に変更MultiSelectFileUploader.ServiceReference.Streamしたためです。

于 2012-06-07T16:06:51.260 に答える
0

の 2 つの異なるバージョンStream( に 1 つと にSystem.IO1 つMultiSelectFileUploader.ServiceReference) があるため、それらを区別する方法が必要になります。

さらに、現在発生しているエラーは、MultiSelectFileUploader.ServiceReference名前空間をどこでも使用していないため、コードがMultiSelectFileUploader.ServiceReference.Streamクラスを認識していないためです。

System.IOとのエイリアスを使用することをお勧めしますMultiSelectFileUploader.ServiceReference

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

次に、エイリアスを使用して、使用しているストリームを次のように指定します (ここで MultiSelectFileUploader.ServiceReference.Stream クラスを使用していると仮定します):

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

以前に発生しなかった理由は、GetFiles が Stream クラスへの明示的な参照を持っていなかったためです。

于 2012-06-07T16:08:35.667 に答える