C# 使用流时使用请求头传递参数

C# 使用流时使用请求头传递参数,c#,wcf,C#,Wcf,在WCF服务中,有一种上载图像文件的方法: 上传图像(流图像数据) 编辑-正如答案所示,下一行是错误的,这是可能的 由于正在使用流,此方法不允许使用其他参数,但需要这些参数 我知道有些开源项目可以处理多部分流,我可以在其中传递更多参数,但我认为请求头可能是一个更简单的解决方案 所以我想知道在这种情况下使用“请求头”方法的缺点是什么 谢谢 由于正在使用流,此方法不允许使用其他参数,但需要这些参数 不是真的。这应该行得通 [OperationContract,WebInvoke(UriTemplat

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

上传图像(流图像数据)

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

由于正在使用流,此方法不允许使用其他参数,但需要这些参数

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

所以我想知道在这种情况下使用“请求头”方法的缺点是什么

谢谢

由于正在使用流,此方法不允许使用其他参数,但需要这些参数

不是真的。这应该行得通

[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());
    }
}

事实上,反对票是可以的。但是没有注释,这不是真正的建设性的。你可以将你的流和其他参数包装在
消息契约中,例如:我想我的假设是错误的,尽管它是基于我在SO上读到的许多问题和其他网络资源。如果我错了,请纠正我,但是我阅读文档的方式可能非常有效,但是传输实际上不会流式传输(我假设这是练习的重点):@KirillShlenskiy
WebServiceHost
可以轻松配置为
webHttpBinding.TransferMode=TransferMode.streamed。我跳过了所有细节,发布了一个简单易读的答案。@L.B:“请注意,向以下Echo或ProvideInfo操作添加第二个参数会导致服务模型恢复为缓冲策略,并使用流的运行时序列化表示形式。只有具有单个输入流参数的操作才与端到端请求流兼容。这条规则同样适用于消息契约。“@ KielsHLLSKIY让我们更具体地了解正在发生的事情。代替引用某些链接,使用FIDDLR2并运行在代码之上。您将不会在HTTP体中看到序列化的内容,只是用WebCube发送的纯二进制数据。