首页  »   Web Service

WCF传递Stream时,同时传递其它参数的有关问题

网友分享于:2015-08-27  浏览:333次
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;
        }
    }   
}

相关解决方案

最新解决方案