У меня проблемы с загрузкой (из Silverlight 4) файла wav на сервер (WCF .NET 4).Файл загружается с SL на сервер и записывается на диск.Но загруженный файл изменяется.Два файла (до загрузки и загруженного) имеют одинаковый размер, но разное содержание.И я попробовал загрузку в обычной консольной программе, она отлично работает.Кажется, что WCF что-то сделал при сериализации данных из SL.У кого-нибудь есть идеи, что происходит?
Сервисный код выглядит следующим образом:
[ServiceContract(Namespace = "")]
interface ISoundService
{
[OperationContract]
int UploadSound(UploadSoundFile file);
}
public int UploadSound(UploadSoundFile file)
{
var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/" + file.FileName;
File.WriteAllBytes(path, file.File);
return 0;
}
[DataContract]
public class UploadSoundFile
{
[DataMember]
public string FileName;
[DataMember]
public byte[] File;
}
Сервисный конфиг:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Service.SoundService.customBinding0" maxReceivedMessageSize="2000000" maxBufferSize="2000000">
<readerQuotas maxArrayLength="2000000" maxStringContentLength="2000000"/>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="Service.SoundServiceBehavior" name="Service.SoundService">
<endpoint address="" binding="basicHttpBinding" contract="Service.ISoundService" bindingConfiguration="Service.SoundService.customBinding0"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Service.SoundServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Клиент Silverlight:
private static int uploadSoundOnServer(string fileName, Stream stream)
{
SoundServiceClient c = new SoundServiceClient();
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, checked((int)stream.Length));
UploadSoundFile file = new UploadSoundFile() { FileName= fileName, File = buffer, };
c.UploadSoundAsync(file);
return 0;
}