Return 类型是 byte[] 而不是 web 服务中的 INT
Return type is byte[] instead of INT in webservices
我在 Active Directory 轻型目录服务中有一个整数属性。
在我的 webservices
中,我访问该属性并读取它的值。
...
SearchResult results = searcher.FindOne();
if (results !=null)
{
if (results.Properties["userStatus"] != null)
{
user.Status = (UserStatusEnum) results.Properties["userStatus"][0];
}
}
...
这一行 returns 正确数据:
results.Properties["userStatus"][0]
Value = 1
(returns整数)
但是,当我将外部 Web 服务指向内部服务时,我 运行 遇到了问题。
当我这样做并执行这一行时:
results.Properties["userStatus"][0]
对于同一用户,现在的值相同 returning
{byte1}
[0]: 49
如果我将状态设置为 2
它将 return
{byte1}
[0]: 50
等等...
为什么会这样?我该如何解决这个问题,或者至少进行调试?
我试图将我的 external
网络服务从等式中删除,并将我的 web application
直接指向 internal
网络服务。我得到了相同的结果。
已解决
感谢 ps2goat 我写了一些代码来完成我需要的。我仍然有兴趣找出 “为什么它使用内部网络服务工作正常,但当我们使用外部网络服务调用它时却不行?!
object statusObj = results.Properties["userStatus"][0];
if (statusObj is byte[])
{
string statusString System.Text.Encoding.Default.GetString((byte[])statusObj);
user.Status = (UserStatusEnum)Convert.ToInt32(statusString);
}
else
{
user.Status = (UserStatusEnum)Convert.ToInt32(statusObj);
}
所以,我以前也遇到过类似的问题。作为一个 int,这些是正确的结果,但它的字面版本是 +48(如果您保持在 0-9 范围内),因为这是字符代码中数字的开始位置。如果你减去 48,你将在前 10 位数字内得到答案,一旦你克服了这一点,获取信息就会变得更加疯狂。
49
是整数 1 的 ASCII 值。看起来您需要将字节值转换回 char
s,然后再转换为 int
s。
这里有一个ASCII码table可以参考:klcconsulting.net/ascii.htm看十进制值49
可以看出是ASCII字符的十进制值1
.如果用户值为10
,它应该return两个字节{49, 48}
,第一个为1
,第二个为0
。
我在 Active Directory 轻型目录服务中有一个整数属性。
在我的 webservices
中,我访问该属性并读取它的值。
...
SearchResult results = searcher.FindOne();
if (results !=null)
{
if (results.Properties["userStatus"] != null)
{
user.Status = (UserStatusEnum) results.Properties["userStatus"][0];
}
}
...
这一行 returns 正确数据:
results.Properties["userStatus"][0]
Value = 1
(returns整数)
但是,当我将外部 Web 服务指向内部服务时,我 运行 遇到了问题。
当我这样做并执行这一行时:
results.Properties["userStatus"][0]
对于同一用户,现在的值相同 returning
{byte1} [0]: 49
如果我将状态设置为 2
它将 return
{byte1} [0]: 50
等等...
为什么会这样?我该如何解决这个问题,或者至少进行调试?
我试图将我的 external
网络服务从等式中删除,并将我的 web application
直接指向 internal
网络服务。我得到了相同的结果。
已解决
感谢 ps2goat 我写了一些代码来完成我需要的。我仍然有兴趣找出 “为什么它使用内部网络服务工作正常,但当我们使用外部网络服务调用它时却不行?!
object statusObj = results.Properties["userStatus"][0];
if (statusObj is byte[])
{
string statusString System.Text.Encoding.Default.GetString((byte[])statusObj);
user.Status = (UserStatusEnum)Convert.ToInt32(statusString);
}
else
{
user.Status = (UserStatusEnum)Convert.ToInt32(statusObj);
}
所以,我以前也遇到过类似的问题。作为一个 int,这些是正确的结果,但它的字面版本是 +48(如果您保持在 0-9 范围内),因为这是字符代码中数字的开始位置。如果你减去 48,你将在前 10 位数字内得到答案,一旦你克服了这一点,获取信息就会变得更加疯狂。
49
是整数 1 的 ASCII 值。看起来您需要将字节值转换回 char
s,然后再转换为 int
s。
这里有一个ASCII码table可以参考:klcconsulting.net/ascii.htm看十进制值49
可以看出是ASCII字符的十进制值1
.如果用户值为10
,它应该return两个字节{49, 48}
,第一个为1
,第二个为0
。