Pdf можно рассматривать как файл.Вы можете использовать byte [] для передачи файла.Ниже приведен мой простой образец.
Мой контракт.
[ServiceContract()]
public interface IFileUpload
{
[OperationContract]
void Upload(byte[] bys);
}
Мой сервис.AspNetCompatibilityRequirementsMode.Allowed используется для включения HttpContext, иначе он будет нулевым.Здесь я непосредственно сохраняю файл на сервере, если вы хотите сохранить его в sqlserver, просто используйте поле varbinary для сохранения байта [] файла PDF.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class FileUploadService : IFileUpload
{
public void Upload(byte[] bys)
{
string filename = Guid.NewGuid().ToString()+".pdf";
File.WriteAllBytes(HttpContext.Current.Request.MapPath("/upload/") + filename, bys);
}
}
Мой web.config службы wcf.Конфигурация привязки ECMSBindingConfig используется для включения загрузки больших данных, или служба не позволяет слишком большие данные.Для aspNetCompatibilityEnabled в serviceHostingEnvironment также должно быть задано значение true, иначе HttpContext будет иметь значение null.
<service name="Service.CalculatorService" >
<endpoint binding="basicHttpBinding" bindingConfiguration="ECMSBindingConfig" contract="ServiceInterface.ICalculatorService"></endpoint>
</service>
<bindings>
<basicHttpBinding>
<binding name="ECMSBindingConfig" allowCookies="false" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647" bypassProxyOnLocal="true" >
<readerQuotas maxArrayLength="2147483647" maxNameTableCharCount="2147483647"
maxStringContentLength="2147483647" maxDepth="2147483647"
maxBytesPerRead="2147483647" />
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
/>
Мой клиент.Веб-форма пользователя в качестве образца.
<form id="form1" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="upload" OnClick="Button1_Click" />
</form>
Код позади.Здесь я использую channelFacotory, он похож на клиент, сгенерированный Visual Studio
protected void Button1_Click(object sender, EventArgs e)
{
HttpPostedFile file = FileUpload1.PostedFile;
using (ChannelFactory<IFileUpload> uploadPdf = new ChannelFactory<IFileUpload>("upload"))
{
IFileUpload fileUpload = uploadPdf.CreateChannel();
byte[] bys = new byte[file.InputStream.Length];
file.InputStream.Read(bys, 0, bys.Length);
fileUpload.Upload(bys);
}
}
Web.config клиента.
<client>
<endpoint name ="upload" address="http://localhost:62193/uploadPdf.svc" binding="basicHttpBinding" contract="ServiceInterface.LargeData.IFileUpload" />
</client>
Я предполагаю, что пользователь загружает PDF, если вы хотите загрузитьдругие файлы, вы можете добавить расширение файла в качестве параметра службы.Другая операция должна быть похожей.