根据MSDN的以下指南,任何使用流式传输的操作只能有一个输入/输出参数。
链接: http://msdn.microsoft.com/en-us/library/ms731913.aspx(请参阅“流式传输限制”标题)
我正在为WCF服务使用流式传输,允许客户/用户将文件上传到它。上传本身工作正常,但我需要一种方法来传递两个输入参数以及Stream对象:'string filename'和'int userid'。
我将如何做到这一点?
答案 0 :(得分:4)
你可以在datacontract中使用一些称为标题的标题:
界面示例:
[ServiceContract]
public interface IFile
{
[OperationContract]
Stream DownloadFile(int fileid);
[OperationContract]
bool UploadFile(FileUploadMessage request);
}
将它放在一个单独的文件中:
[MessageContract]
public class FileUploadMessage
{
[MessageHeader(MustUnderstand = true)]
public int MyInt {get;set;
[MessageHeader(MustUnderstand = true)]
public string MyString {get;set;
[MessageBodyMember(Order = 1)]
public System.IO.Stream FileByteStream {get;set;}
}
答案 1 :(得分:0)
我有一个类似的问题。我创建了一个测试项目,并使用我发现的一个帖子成功创建了一个wcf服务,从另一个项目调用它。我有一个解决方案和两个Web项目。一个项目使用服务引用在另一个项目中调用该服务。 我通过创建一个wcf服务(以“I”开头的文件)生成的接口文件中有ServiceContract和消息契约。所有这一切都很好。然后我去了我们公司的主要项目。它有一个主要的web项目,主持两个silverlight项目。然而,网络项目并不是一个真正的项目,而是一个完全没有项目的网站。我假设将两个silverlight项目添加到网站可能为这三个项目创建了一个解决方案。但是我不确定vs2010如何看待我认为没有指向任何文件的主要网站,因为“真正的”项目会。 发生的事情是当我在主网站上创建了wcf服务并将ServiceContract和MessageContract放入接口文件时,我得到了关于MessageContract及其子类的“接口无法声明类型”。我试图通过将MessageContract放入另一个文件来关注你对这篇文章的建议,但我不确定是什么类型的文件。我尝试将Message契约放入一个类(cs文件)中。但是,ServiceContract引用MessageContract中的类,并且ServiceContract不再看到MessageContract中的类,即使它们是公共的。 我应该使用什么类型的文件来将Message契约与ServiceContract分开?
谢谢, 图