此Web服务需要此xml文件:
request.FeedContent = File.Open("test.xml", FileMode.Open, FileAccess.Read);
我已将该文件放在流中,但此语句会挂起:
stream.Position = 0;
request.FeedContent = stream;
流是标准的.net MemoryStream
我在流上做什么操作使其与File.Open相同?
谢谢!
检查一下(api定义):
/// <summary>
/// Gets and sets the FeedContent property.
/// </summary>
//[XmlElementAttribute(ElementName = "FeedContent")]
public Stream FeedContent
{
get { return this.feedContentField ; }
set { this.feedContentField= value; }
}
答案 0 :(得分:4)
我怀疑网络服务确实需要一个流。它到底怎么代表那个?你确定它不只是期望内容作为字节数组吗?
File.Open
只返回FileStream
- 如果stream
已经是FileStream
,则两者之间没有区别。它只是可能它需要一个FileStream
,而你只有一个Stream
。如果是这种情况,并且文件中的不是,您可能必须将其写入文件并打开FileStream
。然后向网络服务开发者抱怨他们的API很奇怪。
编辑:如果它只期待Stream
,你应该没问题。你说它挂了 - 你试过调试并看到它挂在哪里?它是否因某种原因试图读取更多数据?
答案 1 :(得分:1)
您确定流中的当前位置是否正确?
从文件流移动到内存流时,我做的最常见的错误是在写入内存流之后错过了我的结尾:
stream.Seek(0, SeekOrigin.Begin);
答案 2 :(得分:1)
在分配之前,您是否尝试将文件内容放入内存流?也许该服务正在使用您的文件流不支持的一些流功能。
这样的事情:
var stream = new MemoryStream(File.ReadAllBytes(fileName));
request.FeedContent = stream;
修改强>
等等......我完全误解了你的问题。那么你直接传递FileStream的版本是否有效,如果你提供的MemoryStream具有相同的内容,它不会?
现在我建议您将内存流的内容与文件流的内容进行完全比较。也许是不同的编码?
答案 3 :(得分:0)
File.Open返回一个流。还有其他问题。
答案 4 :(得分:0)
File.Open返回一个打开并位于流开头的FileStream。
您发布的代码:
request.FeedContent = stream;
不表示您要分配给FeedContent的流的状态。例如。也许你没有位于文件的开头? (如果流支持搜索,请使用Stream.Seek,如果它是FileStream或MemoryStream,则使用它。)
如果没有帮助,请发布更多代码。