Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
Wcf 类型';System.Web.HttpInputStream';无法序列化_Wcf_Upload_Stream_Serialization - Fatal编程技术网

Wcf 类型';System.Web.HttpInputStream';无法序列化

Wcf 类型';System.Web.HttpInputStream';无法序列化,wcf,upload,stream,serialization,Wcf,Upload,Stream,Serialization,我一直在试图设计一个WCF文件上传服务,并得到以下错误 在我的web应用程序中: 键入“System.Web.HttpInputStream” 无法序列化。考虑标记 它使用datacontract属性 属性,并标记其所有 要使用序列化的成员 DataMemberAttribute属性。看见 Microsoft.NET框架 其他受支持项目的文档 类型 基于此错误,我已尝试重新标记我的文件传输 使用DataContractAttribute和DataMemberAttribute初始化 但这并没有起

我一直在试图设计一个WCF文件上传服务,并得到以下错误 在我的web应用程序中:

键入“System.Web.HttpInputStream” 无法序列化。考虑标记 它使用datacontract属性 属性,并标记其所有 要使用序列化的成员 DataMemberAttribute属性。看见 Microsoft.NET框架 其他受支持项目的文档 类型

基于此错误,我已尝试重新标记我的文件传输 使用DataContractAttribute和DataMemberAttribute初始化 但这并没有起到任何作用:

[DataContractAttribute(Namespace = "FileTransfer")]
public class FileTransfer
{
    [DataMemberAttribute]
    public string GetUploadStatus;
    [DataMemberAttribute]
    public Tuple<string, int> DoUpload;
    [DataMemberAttribute]
    public int UploadFile;
    [DataMemberAttribute]
    public FileTransferInfo FileInfo;
    [DataMemberAttribute]
    public Stream FileByteStream;
}

谢谢你的帮助

不能定义具有流成员的数据协定。您可以将流作为单个参数获取或返回,也可以定义一个消息协定,该协定有一个类型为Stream的MessageBodyMember,但可以有多个MessageHeader。有关WCF中大数据流的更多信息,请参阅。

如果您不介意,我有一个相关的后续错误:
错误3“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web-06.08.09\8a531a06\51fdee26\assembly\dl3\ae1f49ea\c2031a0d\U 1758ca01\WebAPIBrary.DLL”和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NET临时文件\web-06.08.09\8a531a06\51fdee26\App_WebReferences.7BMOFF1.dll”
我确信我没有重复程序集,并且已清除ASP.NET临时文件。我还删除了我的服务并重新添加了它。你知道我在这里做什么吗?你有一个web引用,而且你似乎引用了一个预编译的数据协定程序集(WebAPILibrary),其中有相同的命名空间/类型名。如果要引用外部程序集,请删除您的web引用。可能存在的重复项
[DataContract(Namespace = "FileTransfer")]
public class FileTransferInfo
{
    private string _guid;
    private int _flag;
    private long _fileSize;
    private string _fileName;
    private DateTime _lastUpdate;
    private FileTypeEnum _fileType;

    //REMOVED GETTERS AND SETTERS FOR SPACE 

 }

[ServiceContract(Namespace = "FileTransfer")]
public interface IFileTransferService
{
    [OperationContract(Name = "DoUpload")]
    Tuple<string, int> DoUpload(List<FileTransferInfo> request);

    [OperationContract(Action="UploadFile", Name="UploadFile")]
    int UploadFile(FileTransfer request);

}
int IFileTransferService.UploadFile(FileTransfer request)
{

    string uploadFolder = @"C:\TempMultiFileUploads\";
    int errCode = default(int);
    // parameters validation omitted for clarity
   try 
   {
        string filename = request.FileInfo.FileName;
        string filePath = Path.Combine(uploadFolder, filename);

        using (FileStream outfile = new FileStream(filePath, FileMode.Create))
        {
            const int bufferSize = 65536; // 64K

            Byte[] buffer = new Byte[bufferSize];
            int bytesRead = request.FileByteStream.Read(buffer, 0, bufferSize);

            while (bytesRead > 0)
            {
                outfile.Write(buffer, 0, bytesRead);
                bytesRead = request.FileByteStream.Read(buffer, 0, bufferSize);
            }
        }
    }
    catch (IOException e)
    {
        //System.IOException
        errCode = 800;
    }

   return errCode;

} 
    And, below is the endpoint, binding, and bahavior of my FileTransferService:

<endpoint name="MyFileTransferEP"
          address=""
          binding="basicHttpBinding"
          behaviorConfiguration="BasicHttpEPBehavior"
          bindingConfiguration="httpLargeDataStream"
          contract="FileTransfer.IFileTransferService" />   

<binding name="httpLargeDataStream" 
               closeTimeout="00:01:00" 
               openTimeout="00:01:00"
               receiveTimeout="00:10:00" 
               sendTimeout="00:01:00" 
               maxBufferSize="65536"
               maxReceivedMessageSize="2147483647" 
               messageEncoding="Mtom"
               transferMode="StreamedRequest">        

<behavior name="BasicHttpEPBehavior">
    <dataContractSerializer maxItemsInObjectGraph="2147483646" />
</behavior>  
FileTransferServiceClient upload = new FileTransferServiceClient();
HttpPostedFile m_objFile = default(HttpPostedFile);
FileTransfer transmit = new FileTransfer();

transmit.FileByteStream = m_objFile.InputStream;
transmit.FileInfo = new FileTransferInfo();
transmit.FileInfo.Guid = Guid.NewGuid().ToString();
transmit.FileInfo.Flag = default(int);
transmit.FileInfo.FileSize = m_objFile.ContentLength;
transmit.FileInfo.FileName = m_objFile.FileName;
transmit.FileInfo.LastUpdate = DateTime.Now;

int retParam = upload.UploadFile(transmit); // THROWS ERROR HERE