C# 调用'时出现API异常;DataWarehouseGetReportData';在C中#

C# 调用'时出现API异常;DataWarehouseGetReportData';在C中#,c#,xml,web-services,adobe-analytics,C#,Xml,Web Services,Adobe Analytics,我正在使用Omnitureapi下载报告。当我使用DataWarehouseCheckRequest方法检查状态时,报告已完成。现在,当我尝试使用DataWarehouseGetReportData方法获取报告时,我得到 对操作“DataWarehouseGetReportData”的回复消息正文进行反序列化时出现通信异常错误 内部例外说 无法识别指定的类型:name='data\u warehouse\u report\u row',namespace='1!'http://www.omnit

我正在使用
Omniture
api下载报告。当我使用
DataWarehouseCheckRequest
方法检查状态时,报告已完成。现在,当我尝试使用
DataWarehouseGetReportData
方法获取报告时,我得到

对操作“DataWarehouseGetReportData”的回复消息正文进行反序列化时出现通信异常错误

内部例外说

无法识别指定的类型:name='data\u warehouse\u report\u row',namespace='1!'http://www.omniture.com/,在

我对C#和API都是新手。我不知道怎么解决这个问题。请帮忙


谢谢

当您想下载DW报告时,最好的选择是通过http进行下载。这是标准的方法,而且效率更高

对CheckRequest的响应包含一个DataURL。用它来下载数据

下面是一些c#示例代码,我用于一个几乎相同的API(合作伙伴和企业API)(注意,我也不是c#专家,所以您需要对此进行代码审查)

以及支持方法

    /*** Here are the private functions ***/
    // Encrypting passwords with SHA1 in .NET and Java
    // http://authors.aspalliance.com/thycotic/articles/view.aspx?id=2 
    private static string getBase64Digest(string input)
    {
        SHA1 sha = new SHA1Managed();
        ASCIIEncoding ae = new ASCIIEncoding();
        byte[] data = ae.GetBytes(input);
        byte[] digest = sha.ComputeHash(data);
        return Convert.ToBase64String(digest);
    }

    // generate random nonce 
    private static string generateNonce()
    {
        Random random = new Random();
        int len = 24;
        string chars = "0123456789abcdef";
        string nonce = "";
        for (int i = 0; i < len; i++)
        {
            nonce += chars.Substring(Convert.ToInt32(Math.Floor(random.NextDouble() * chars.Length)), 1);
        }
        return nonce;
    }

    // Time stamp in UTC string 
    private static string generateTimestamp()
    {
        return DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
    }

    // C#-Base64 Encoding 
    // http://www.vbforums.com/showthread.php?t=287324 
    public static string base64Encode(string data)
    {
        byte[] encData_byte = new byte[data.Length];
        encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
        string encodedData = Convert.ToBase64String(encData_byte);
        return encodedData;
    }
/***以下是私有函数***/
//在.NET和Java中使用SHA1加密密码
// http://authors.aspalliance.com/thycotic/articles/view.aspx?id=2 
私有静态字符串getBase64Digest(字符串输入)
{
SHA1 sha=新的SHA1管理();
ascienceoding ae=新的ascienceoding();
字节[]数据=ae.GetBytes(输入);
字节[]摘要=sha.ComputeHash(数据);
返回Convert.tobase64字符串(摘要);
}
//生成随机nonce
私有静态字符串生成器()
{
随机=新随机();
int len=24;
string chars=“0123456789abcdef”;
字符串nonce=“”;
对于(int i=0;i

祝你好运!C.

Hi@Chris,我用了这个方法,效果很好。虽然我不确定这是如何比通常的SOAP请求更高效,但您能解释一下吗?您好@pearl67,它更高效,因为它采用基本的制表符分隔格式,并且非常简单。xml非常冗长,我们谈论的数据大小可以达到2GB。因此,以制表符分隔的格式获得的数据要比xml多得多。同样在大xml格式中,您可能需要尝试SAX解析器来管理内存需求,因此IMHO的复杂性要高得多。最好的luck@pearl67,因为这对你有效,你能接受这个答案吗。
    /*** Here are the private functions ***/
    // Encrypting passwords with SHA1 in .NET and Java
    // http://authors.aspalliance.com/thycotic/articles/view.aspx?id=2 
    private static string getBase64Digest(string input)
    {
        SHA1 sha = new SHA1Managed();
        ASCIIEncoding ae = new ASCIIEncoding();
        byte[] data = ae.GetBytes(input);
        byte[] digest = sha.ComputeHash(data);
        return Convert.ToBase64String(digest);
    }

    // generate random nonce 
    private static string generateNonce()
    {
        Random random = new Random();
        int len = 24;
        string chars = "0123456789abcdef";
        string nonce = "";
        for (int i = 0; i < len; i++)
        {
            nonce += chars.Substring(Convert.ToInt32(Math.Floor(random.NextDouble() * chars.Length)), 1);
        }
        return nonce;
    }

    // Time stamp in UTC string 
    private static string generateTimestamp()
    {
        return DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
    }

    // C#-Base64 Encoding 
    // http://www.vbforums.com/showthread.php?t=287324 
    public static string base64Encode(string data)
    {
        byte[] encData_byte = new byte[data.Length];
        encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
        string encodedData = Convert.ToBase64String(encData_byte);
        return encodedData;
    }