Я пытаюсь создать службу загрузки WCF файл, и я получаю следующее сообщение об ошибке в моем веб-приложение:Тип «System.Web.HttpInputStream» не может быть сериализовать
Тип «System.Web.HttpInputStream ' не может быть сериализован. Рассмотрите маркировку с атрибутом DataContractAttribute и отметьте все его членов, которые вы хотите сериализовать с атрибутом DataMemberAttribute. См. документацию для других поддерживаемых типов .
На основании этой ошибки, я попытался повторно маркировки мой класс FileTransfer с 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;
}
Я пытался доступ к моей службы журнала трассировки с Service Trace Viewer до Посмотрите, могу ли я получить более подробную информацию об этой ошибке. Я обнаружил ряд ошибок со следующим сообщением:
Сообщение с To «» http://localhost:1242/WebProj/filetransfer.svc/mex/mex не могут быть обработаны в приемнике, из-за несоответствия AddressFilter на EndpointDispatcher. Проверьте, согласны ли адреса отправителя и получателя .
Что было бы полезно для меня, но я также нашел ту же ошибку для:
в одной и той же трассе, и я был в состоянии проверить подлинность просто отлично без любые ошибки, которые заставляли меня задаться вопросом, является ли эта ошибка чем-то, о чем я должен беспокоиться (если у какого-либо органа есть предположение о том, почему на моей конечной точке есть mex/mex, это было бы замечательно).
Итак, почему не может быть сериализован «System.Web.HttpInputStream»? Я представил другие важные аспекты моего кода ниже. Может быть, кто-то там может увидеть что-то, что я пропустил?
[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);
}
Вот мой метод UploadFile, который возвращает ошибку.
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
Спасибо за вашу помощь.
Возможный дубликат http://stackoverflow.com/questions/1580639/type-system-web-httprequest-cannot-be-serialized –