使用WCF流式传输限制

问题描述:

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

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

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

我该怎么做呢?

There's一些所谓的头,你可以在你的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;} 
} 
+0

我得到错误“接口不能声明类型”当我加入你的代码我的ServiceContract。这就是它现在的样子:http://pastebin.com/xaFM4EDN – rafale 2011-05-23 20:33:45

+0

我将MessageContract移到了ServiceContract之外,现在似乎正在编译。不过,我不确定如何使用消息合约。我从哪里出发?链接:http://pastebin.com/ykrvgEfi – rafale 2011-05-23 21:33:31

+0

嗨!接口不能像你注意到的那样在自己内部声明类,所以把它放在一个单独的文件/类中是完全正确的。 接下来,使用该类作为更新示例中所示方法的输入参数。然后,您只需使用request.FileByteStream从服务中的流中读取。 – Almund 2011-05-25 12:45:05

我有有点类似的问题。我创建了一个测试项目,并使用一篇文章发现成功创建一个wcf服务,并从另一个项目调用它。我有一个解决方案和两个Web项目。一个项目使用服务参考在另一个项目中调用该服务。 我在通过创建一个wcf服务(以“I”开头的文件)生成的接口文件中拥有ServiceContract和消息协定。所有这一切都很好。然后我去了我们公司的主要项目。它有一个主要的web项目,主持两个silverlight项目。然而,网络项目并不是一个真正的项目,而是一个没有任何项目的网站。我曾假设将两个silverlight项目添加到网站可能为所有三个项目创建了一个解决方案。然而,我不确定vs2010如何看待我认为的主要网站没有指向任何文件的“真实”项目。 当我在主网站创建wcf服务并将ServiceContract和MessageContract放入接口文件时发生了什么我得到了有关MessageContract及其子类的“接口无法声明类型”的问题。我试图按照你的建议采取MessageContract并将其放入另一个文件,但我不知道什么类型的文件。我尝试将消息合约放入类(cs文件)中。但是,ServiceContract引用MessageContract中的类,即使它们是公共的,ServiceContract也不再看到MessageContract中的类。 我应该使用哪种类型的文件将消息合约与ServiceContract分开?

感谢, 图

+0

声明他们在一个单独的CS文件是好的。确保您的合同/接口声明与实现它们的类位于相同的名称空间中。否则,它们彼此不可见。 – rafale 2011-08-11 08:19:09