无法从我的客户端将XML文本传递给RIA Services

时间:2012-07-11 21:02:36

标签: wcf wcf-ria-services

我试图在一个查询操作中将以下XML文本传递给RIA服务,该操作返回一个可查询的实体序列作为响应:

<?xml version="1.0" encoding="utf-8"?>
<project>
    <item type="Item" filetype="cabinet" category="EZ Workshop" name="EZW Panel Edge-Banded" height="24.000000" width="36.000000" depth="0.725000" quantity="1">
    </item>
    <item type="Item" filetype="cabinet" category="EZ Furniture" name="Entry Bench" height="19.000000" width="48.000000" depth="17.999999" quantity="1">
    </item>
    <item type="Item" filetype="cabinet" category="EZ Closet Euro Style" name="CSEKD Tall H3R 28-72W 12-24D" height="84.000000" width="54.000000" depth="19.999999" quantity="1">
    </item>
    <item type="Item" filetype="assembly" category="EZ Pro ManCave" name="EZ Corn Hole Game-Set" height="0" width="0" depth="0" quantity="1">
    </item>
    <item type="Item" filetype="assembly" category="EZ Office" name="EZ 30 Printer Stand" height="0" width="0" depth="0" quantity="1">
    </item>
    <item type="Item" filetype="assembly" category="Corporate Culture Pro" name="C-Table" height="0" width="0" depth="0" quantity="1">
    </item>
</project>

这是查询操作:

[Query]
public IQueryable<ProjectItem> GetItemsFromImport(String a_strImportXml)
{
    // Return empty sequence for now as a test.
    return new ProjectItem[0].AsQueryable();
}

当我传递完整的XML时,我得到了令人讨厌的“Not Found”异常,并且我的操作中的断点从未被击中。我正在使用Visual Studio 2010的ASP.NET开发服务器。当我得到“Not Found”时,它预示着糟糕的东西。踢球者,当我传递一个空字符串时,我完全没有例外,并且突破点被击中。

正如您所看到的,它不是一个非常长的XML文档。发送的数据量是否有限制?我是否必须逃避文件?

感谢。

编辑:

我发现在发送之前我只需要从文档中删除结构字符('&lt;','&gt;'和'&amp;')。我正在使用String.Replace来执行此操作。有谁知道是否有更好的方法来实现这一目标。可能与Uri.EscapeDataString类似的东西?

var strImportXml = a_xImport.ToString();
strImportXml = strImportXml.Replace("&", "&amp;");
strImportXml = strImportXml.Replace("<", "&lt;");
strImportXml = strImportXml.Replace(">", "&gt;");

1 个答案:

答案 0 :(得分:0)

好的,所以我想这就是我自己问题的答案。我发现在发送之前我只需要从文档中删除结构字符('&lt;','&gt;'和'&amp;')。我正在使用String.Replace来做到这一点。有谁知道是否有更好的方法来实现这一目标。或许类似于Uri.EscapeDataString的东西?

var strImportXml = a_xImport.ToString();
strImportXml = strImportXml.Replace("&", "&amp;");
strImportXml = strImportXml.Replace("<", "&lt;");
strImportXml = strImportXml.Replace(">", "&gt;");

注意:我还是想知道是否有更好的方法来做到这一点。