读书人

WCF传递Stream时同时传递其它参数的

发布时间: 2012-07-16 15:44:59 作者: rapoo

WCF传递Stream时,同时传递其它参数的问题
刚开始学习wcf,遇到一个问题,就是如果我想在服务器端定义一个有两个参数的方法,一个参数为Stream,另一个为string或其它类型,访问WCF时就会报出这个错误:

[InvalidOperationException: 要使操作 GetName 中的请求成为流,操作必须具有其类型为 Stream 的单个参数。]

这个是我服务器端接口的写法:

C# code
[ServiceContract]public interface ITestService{    [OperationContract]    [WebInvoke(Method = "POST")]    Stream GetName(Stream name,string inputStr);}


这个是我服务器端实现的方法

C# code
public class TestService:ITestService{    public TestService()    {        //        // TODO: Add constructor logic here        //    }    public Stream GetName(Stream name,string inputStr)    {        var sr = new StreamReader(name);        string text = sr.ReadToEnd();        return new System.IO.MemoryStream(Encoding.UTF8.GetBytes("Test Service: "+" inputStr: "+inputStr+ text));    }}



运行就会有上面的错误

大神们,我要写一个及接收Stream,又同时接收其它类型的方法用该怎么设置?

我第一次玩csdn,有好多不懂得东西,谢谢各位了


[解决办法]
用MessageContract修饰的类作为参数。Stream声明在类里面。

C# code
[ServiceContract]public interface ITransferService{    [OperationContract]    RemoteFileInfo DownloadFile(DownloadRequest request);     [OperationContract]     void UploadFile(RemoteFileInfo request); }[MessageContract]public class DownloadRequest{    [MessageBodyMember]    public string FileName;}[MessageContract]public class RemoteFileInfo : IDisposable{    [MessageHeader(MustUnderstand = true)]    public string FileName;    [MessageHeader(MustUnderstand = true)]    public long Length;    [MessageBodyMember(Order = 1)]    public System.IO.Stream FileByteStream;    public void Dispose()    {         if (FileByteStream != null)        {            FileByteStream.Close();            FileByteStream = null;        }    }   } 

读书人网 >Web Service

热点推荐