C# WCF的流传输限制

C# WCF的流传输限制,c#,wcf,wcf-streaming,C#,Wcf,Wcf Streaming,根据MSDN的以下指南,任何使用流式传输的操作只能有一个输入/输出参数 链接:(请参阅标题“流式传输的限制”) 我正在为WCF服务使用流式传输,该服务允许客户端/消费者向其上传文件。上传本身工作正常,但我需要一种方法来传递另外两个输入参数以及流对象:“stringfilename”和“intuserid” 我该怎么做呢?您可以在datacontract中使用标题: 接口示例: [ServiceContract] public interface IFile { [OperationCont

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

链接:(请参阅标题“流式传输的限制”)

我正在为WCF服务使用流式传输,该服务允许客户端/消费者向其上传文件。上传本身工作正常,但我需要一种方法来传递另外两个输入参数以及流对象:“stringfilename”和“intuserid”


我该怎么做呢?

您可以在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;}
}

我有一个类似的问题。我创建了一个测试项目,并使用我找到的帖子成功创建了一个wcf服务,并从另一个项目调用它。我有一个解决方案和两个web项目。一个项目使用服务引用调用另一个项目中的服务。 我在通过创建wcf服务(以“I”开头的文件)生成的接口文件中有ServiceContract和message contract。所有这些都很有效。然后我去了我们公司的主要项目。它有一个主web项目,承载两个silverlight项目。然而,web项目并不是一个真正的项目,而是从一个没有任何项目的网站开始的。我假设将两个silverlight项目添加到网站可能会为所有三个项目创建一个解决方案。然而,我不确定vs2010如何看待主网站,我假设它没有指向任何文件的指针,就像一个“真正的”项目一样。 发生的事情是,当我在主网站中创建wcf服务并将ServiceContract和MessageContract放入接口文件时,我得到了关于MessageContract及其子类的“接口不能声明类型”消息。我正试图按照你在这篇文章中的建议,将MessageContract放入另一个文件中,但我不确定是哪种类型的文件。我尝试将消息契约放入一个类(cs文件)。但是,ServiceContract引用MessageContract中的类,并且ServiceContract不再看到MessageContract中的类,即使它们是公共的。 我应该使用什么类型的文件来分隔消息协定和服务协定

谢谢,

当我尝试将您的代码添加到我的ServiceContract中时,出现错误“接口无法声明类型”。这就是它现在的样子:我将MessageContract移到了ServiceContract之外,现在似乎正在编译。不过,我不确定如何使用消息契约。我该怎么办?链接:嗨!正如您所注意到的,接口不能在其内部声明类,因此将其放在单独的文件/类中是完全正确的。接下来,您将使用该类作为方法的输入参数,如更新的示例所示。然后,您只需使用request.FileByteStream读取服务中的流。另一件事,请确保在使用后在客户端和服务器上处理流,否则可能会导致一些令人痛苦的泄漏。Silverlight 5中似乎不喜欢这种情况。有什么提示吗?在单独的CS文件中声明它们是可以的。确保契约/接口声明与实现它们的类位于同一命名空间中。否则,它们彼此不可见。