【发布时间】:2015-06-25 19:06:31
【问题描述】:
我在 Active Directory 轻量级目录服务中有一个整数属性。
在我的webservices 中,我访问该属性并读取它的值。
...
SearchResult results = searcher.FindOne();
if (results !=null)
{
if (results.Properties["userStatus"] != null)
{
user.Status = (UserStatusEnum) results.Properties["userStatus"][0];
}
}
...
这行返回正确的数据:
results.Properties["userStatus"][0]
Value = 1(返回整数)
但是,当我将外部 Web 服务指向内部服务时,我遇到了问题。
当我这样做并执行这一行时:
results.Properties["userStatus"][0]
对于同一个用户,它现在返回的值相同
{byte1} [0]: 49
如果我将状态设置为2,它将返回
{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);
}
【问题讨论】:
-
49是整数1的 ascii 值。看起来您需要将其转换回char。 klcconsulting.net/ascii.htm 看十进制值 49。所以如果用户值为10,也许它会返回{49, 48}为 1 和 0。 -
@ps2goat,如果为 1,则返回
49,如果为 2,则返回50,如果为 3,则返回51,依此类推...我尝试将其转换为 @ 987654343@ 但我得到Invalid object cast。 -
对,检查
10返回的内容。如果将10的字符串值转换为字节,则在ascii中为{49,48}。我链接到的那个表有一个十进制(字节)值到字符值的列表。一旦你达到两位数,你就可以看到真正的模式。 -
@ps2goat,你是对的。
10的值返回{byte[2]}[0]: 49 [1]:48我确实看到了这种模式。但不幸的是,我无法将byte转换为char。 -
我会说Web服务合同有问题,然后(WSDL)。或者这是一个 RESTful 服务等?请向我们提供更多信息。
标签: c# web-services integer type-conversion byte