【发布时间】:2010-06-17 15:53:03
【问题描述】:
我正在尝试将 byte[] 从客户端发送到 Web 服务。该数组由一个序列化的 XML 文件组成。
我的测试场景有效(使用非常小的字节 [])。代码如下:
FormsService.FormsServiceClient client = new FormsService.FormsServiceClient();
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
XmlElement element = doc.CreateElement("child");
root.AppendChild(element);
doc.AppendChild(root);
MemoryStream ms = new MemoryStream();
doc.Save(ms);
byte[] bytes = ms.ToArray();
if (client.ServerActive())
{
client.SubmitForm(bytes);
Console.ReadLine();
}
服务端代码如下所示:
public byte[] SubmitForm(byte[] bytes)
{
XmlDocument doc = new XmlDocument();
string xml = Encoding.UTF8.GetString(decryptedBytes);
doc.LoadXml(xml);
XmlNodeList nodeList = doc.GetElementsByTagName("child");
byte[] returnBytes = Encoding.UTF8.GetBytes(nodeList[0].Name);
return bytes;
}
这非常有效。结果是正确的。
但是,当我尝试从我的文件系统中读取一个实际的 xml 文件时(当我将它显示到控制台时它正在正确读取),即使我只是尝试接受并返回数组,提交也会返回一个错误:
在 mscorlib.dll 中发生了“System.ServiceModel.Dispatcher.NetDispatcherFaultException”类型的第一次机会异常
实际的客户端代码:
FormsService.FormsServiceClient client = new FormsService.FormsServiceClient();
XmlDocument doc = new XmlDocument();
doc.Load(myFilePath);
MemoryStream ms = new MemoryStream();
doc.Save(ms);
byte[] bytes = ms.ToArray();
if (client.ServerActive())
{
client.SubmitForm(bytes);
Console.ReadLine();
}
服务端代码:
public byte[] SubmitForm(byte[] bytes)
{
return bytes;
{
以前有人遇到过这个问题吗?我看不出这两种情况有多大区别,但我对 C# 缺乏经验。
任何建议将不胜感激。
谢谢!
坏熊猫
【问题讨论】:
-
你的服务端
SubmitForm很奇特。您构造了一个从未使用过的returnBytes对象,然后您将原始的bytes参数返回给调用者,而不对其进行任何操作。这是设计使然吗? -
是的。这只是我为使一般功能正常工作而测试的代码……实际的应用程序使用了返回的字节数组,它与发送的字节数组不同。不过谢谢!
标签: c# xml web-services bytearray