2

根据 MSDN 上的以下指南,任何使用流传输的操作都只能有一个输入/输出参数。

链接: http: //msdn.microsoft.com/en-us/library/ms731913.aspx(参见标题“流传输的限制”)

我正在为 WCF 服务使用流传输,该服务允许客户端/消费者将文件上传到它。上传本身工作正常,但我需要一种方法来传递另外两个输入参数以及 Stream 对象:'string filename' 和 'int userid'。

我该怎么做呢?

4

2 回答 2

4

您可以在数据合同中使用称为标头的内容:

接口示例:

[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;}
}
于 2011-05-23T07:59:17.880 回答
0

我有一个类似的问题。我创建了一个测试项目,并使用我找到的帖子成功创建了一个 wcf 服务,从另一个项目调用它。我有一个解决方案和两个 Web 项目。一个项目使用服务引用调用另一个项目中的服务。我在通过创建 wcf 服务(以“I”开头的文件)生成的接口文件中有 ServiceContract 和消息协定。所有这一切都很好。然后我去了我们公司的主要项目。它有一个主 Web 项目,其中包含两个 silverlight 项目。然而,网络项目并不是一个真正的项目,而是作为一个根本没有项目的网站开始的。我假设将两个 silverlight 项目添加到网站可能为所有三个项目创建了一个解决方案。但是,我' 我不确定 vs2010 是如何看待主网站的,我假设它没有像“真实”项目那样指向任何文件的指针。发生的事情是,当我在主网站中创建 wcf 服务并将 ServiceContract 和 MessageContract 放入接口文件时,我得到了关于 MessageContract 及其子类的“接口无法声明类型”消息。我正在尝试通过获取 MessageContract 并将其放入另一个文件来遵循您在这篇文章中的建议,但我不确定是什么类型的文件。我尝试将 Message 合同放入一个类(cs 文件)中。但是,ServiceContract 引用 MessageContract 中的类,并且 ServiceContract 不再看到 MessageContract 中的类,即使它们是公共的。

谢谢,图

于 2011-08-10T21:26:46.530 回答