使用Stream时使用请求标头传递参数

时间:2014-06-27 15:26:08

标签: c# wcf

在WCF服务中,有一种上传图像文件的方法:

  

UploadImage(Stream imageData);

编辑 - 正如答案所示,下一行是错误的,这是可能的!

在使用Stream时,此方法不允许使用其他参数,但需要这些参数。

我知道有一些开源项目可以处理多部分流,我可以传递更多参数,但是我们认为请求标头可能是一个更简单的解决方案。

所以我想知道在这种情况下使用“请求标头”方法可能有什么缺点?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

在使用Stream时,此方法不允许使用其他参数,但需要这些参数。

不是真的。这应该有用。

[OperationContract,WebInvoke(UriTemplate="{name}")]
UploadImage(Stream imageData, string name);

这是一个工作样本

async void TestMethod()
{
    Task.Run(() =>
    {
        var host = new WebServiceHost(typeof(MyContract), new Uri("http://0.0.0.0:8088/Test"));
        host.Open();
    });

    await Task.Delay(2000);

    new Webclient().UploadData("http://localhost:8088/Test/UploadImage/abc.bmp", new byte[] { 65, 66, 67, 68, 69 });
}


[ServiceContract]
class MyContract 
{
    [OperationContract, WebInvoke(UriTemplate = "/UploadImage/{name}")]
    public void UploadImage(Stream s, string name)
    {
        Console.WriteLine(name  +  " -> " + new StreamReader(s).ReadToEnd());
    }
}