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;
}