Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从wcf流式Web服务获取底层流_Wcf_Web Services_Streaming - Fatal编程技术网

从wcf流式Web服务获取底层流

从wcf流式Web服务获取底层流,wcf,web-services,streaming,Wcf,Web Services,Streaming,我正在WCF中构建流式Web服务,在访问底层流时遇到问题 我正在实现一个基于wsdl的现有契约,但我想让服务流化。因为我不能更改合同,所以我不能将流用作参数选项(因为这会更改合同) 因此,我决定使用消息作为参数并返回。这是完美的 但我希望能够访问流对象(它必须位于消息对象或其属性的某个位置)。但是消息给我的唯一东西是XmlDictionaryReader,这不允许访问流 public Message GetMessage(Message message) { // We

我正在WCF中构建流式Web服务,在访问底层流时遇到问题

我正在实现一个基于wsdl的现有契约,但我想让服务流化。因为我不能更改合同,所以我不能将流用作参数选项(因为这会更改合同)

因此,我决定使用消息作为参数并返回。这是完美的

但我希望能够访问流对象(它必须位于消息对象或其属性的某个位置)。但是消息给我的唯一东西是XmlDictionaryReader,这不允许访问流

public Message GetMessage(Message message)
    {
        // We need some way to access the underlying stream from the message - the GetReaderAtBodyContents is not usable
        XmlDictionaryReader reader = message.GetReaderAtBodyContents();
        CopyReaderToFile(reader);
        return Message.CreateMessage(MessageVersion.Soap11, "http://tempuri.org/IStreamingService/GetMessageResponse", "Hej med dig fra GetMessage. MessageLength ");
    }
上面显示了我的服务实现。XmlDictionaryReader的主要问题是它不允许我访问客户端发送的精确数据——换句话说,我无法在服务上从客户端复制内容。这很糟糕,因为我无法验证MessageHeaders中存在的签名

那么有没有一种方法可以访问底层流呢?这可以通过行为来实现吗


提前感谢

问题在于流式传输不是由消息本身提供的,而是由消息编码器提供的。正如您在抽象MessageEncoder类的两个方法中所看到的:


该流仅在通道级别上可用,不在消息中可用。另一个问题是流式传输不能与消息安全性相结合,因此不能使用任何内置签名等。

问题在于流式传输不是由消息本身提供的,而是由消息编码器提供的。正如您在抽象MessageEncoder类的两个方法中所看到的:

该流仅在通道级别上可用,不在消息中可用。另一个问题是流式传输不能与消息安全性相结合,因此不能使用任何内置的签名等