none
构架发布为web service的问题 RRS feed

  • 问题

  • 我是一个初学者。今天做了一个练习,发布构架作为web serivce,然后自己写了一个console 程序测试。
    在console中调用发布的web service后,返回错误。查看事件查看器有如下的错误:

    Check group membership failed.
     Group Name: SSO Administrators
     Account Name: ALECK-OFFICEPC$
     Additional Data: 533
     Error Code: 0xC0002A1C, The account name is not valid or does not exist.

    Access denied. The client user must be a member of one of the following accounts to perform this function.
     SSO Administrators: SSO Administrators
     SSO Affiliate Administrators: SSO Affiliate Administrators
     Application Administrators: BizTalk Server Administrators
     Application Users: BizTalk Isolated Host Users
     Additional Data: WORKGROUP\ALECK-OFFICEPC$ {68262016-D9C6-43A4-B593-90D7D1876337} SOAP_RL_BizTalkServerIsolatedHost_{68262016-D9C6-43A4-B593-90D7D1876337}

    SSO AUDIT
     Function: GetConfigInfo ({E099461F-405A-431E-869A-BD6BFC65C1B8})
     Tracking ID: 5320b27d-95e7-4e7f-a771-d8d14dc45bbc
     Client Computer: aleck-OfficePC (w3wp.exe:5648)
     Client User: WORKGROUP\ALECK-OFFICEPC$
     Application Name: {68262016-D9C6-43A4-B593-90D7D1876337}
     Error Code: 0x80070005, 拒绝访问。

    The Messaging Engine failed to retrieve the configuration from the database. Details:"80070005".

    我的开发环境是win vista,vs 2008 ,biztalk 2009 beta.
    在ii7中,发布的web service为匿名访问,已经把匿名访问的身份验证凭据指向了管理员的账号。
    现在出现这个问题不知该如何解决? 请帮忙看下
    2009年3月19日 1:45

答案

  •  应该是:application pool的运行账号是BizTalk Isolated Host Users组的成员,并且是IIS_IUSRS组的成员。BizTalk Isolated Host Users具有biztalk数据库的访问权限。

    biztalk消费web services,如果web services方法的参数或返回值是简单类型时,biztalk项目在引用WS后不产生xsd。复杂类型会生成相应的xsd。

    专注于biztalk。 chnking.cnblogs.com
    • 已标记为答案 GaryZhang 2009年5月11日 4:46
    2009年3月19日 13:49
  •  问题已解决。
    总结一下:有两个账号需要关注一下.
    1、application pool的运行账号,该账号需要能够访问biztalk的数据库。
    2、web service的匿名账号,该账号需要在BizTalk Isolated Host Users 用户组下。
    3、network账号需要在BizTalk Isolated Host Users 用户组下。
    前面又测试了下,好像有缓存的影响,第2,3点有些混淆了。具体的我会再测试下。不过2,3都加上,一定能行。忘了说我的操作系统是vista.


    另外有个问题想请教一下,我在流程内调用了一个web service用于将入口ws传入的对象写入数据库。然后返回该对象的记录号(int)。
    添加ws引用后,并没有生成返回消息的xsd, 不知道是不是返回简单类型的缘故?
    由于没有xsd 架构文件,无法使用map。如何将这个内部ws的返回消息转变为入口web service的返回消息?
    请版主举个例子说明一下.
    • 已标记为答案 GaryZhang 2009年5月11日 4:46
    2009年3月19日 8:58
  • 关于第一个pool的帐号问题,请参考这篇文章:http://www.cnblogs.com/chnking/archive/2006/06/10/422639.html

    至于你说的“如何把简单类型转变为输出需要的消息?”,你的说的“输出需要的消息”是不是一个有架构的消息?
    你需要做的是新建一个输出的有架构的消息,然后把WS的返回的简单类型赋给消息中的某个element。
    至于怎么从零新建一个架构消息,请参看:biztalk中使用.net class类型的消息(一) -- 相关知识介绍 ,其中的“七.   Orchestration中从零开始新建一个xml类型的消息”
    专注于biztalk。 chnking.cnblogs.com
    • 已标记为答案 GaryZhang 2009年5月11日 4:47
    2009年3月20日 2:39

全部回复

  • 从错误提示看,实际上服务端认为客户端的账户为:Account Name: ALECK-OFFICEPC$
    检查一下,IIS的验证是不是匿名和windows验证同时都选了。
    专注于biztalk。 chnking.cnblogs.com
    2009年3月19日 5:25
  •  问题已解决。
    总结一下:有两个账号需要关注一下.
    1、application pool的运行账号,该账号需要能够访问biztalk的数据库。
    2、web service的匿名账号,该账号需要在BizTalk Isolated Host Users 用户组下。
    3、network账号需要在BizTalk Isolated Host Users 用户组下。
    前面又测试了下,好像有缓存的影响,第2,3点有些混淆了。具体的我会再测试下。不过2,3都加上,一定能行。忘了说我的操作系统是vista.


    另外有个问题想请教一下,我在流程内调用了一个web service用于将入口ws传入的对象写入数据库。然后返回该对象的记录号(int)。
    添加ws引用后,并没有生成返回消息的xsd, 不知道是不是返回简单类型的缘故?
    由于没有xsd 架构文件,无法使用map。如何将这个内部ws的返回消息转变为入口web service的返回消息?
    请版主举个例子说明一下.
    • 已标记为答案 GaryZhang 2009年5月11日 4:46
    2009年3月19日 8:58
  •  应该是:application pool的运行账号是BizTalk Isolated Host Users组的成员,并且是IIS_IUSRS组的成员。BizTalk Isolated Host Users具有biztalk数据库的访问权限。

    biztalk消费web services,如果web services方法的参数或返回值是简单类型时,biztalk项目在引用WS后不产生xsd。复杂类型会生成相应的xsd。

    专注于biztalk。 chnking.cnblogs.com
    • 已标记为答案 GaryZhang 2009年5月11日 4:46
    2009年3月19日 13:49
  • 谢谢版主的总结。在iis7 中 defaultapppool的运行账号缺省是NetworkService。在计算机管理中设置用户权限时,对应的是哪个内置账号? network 还是 network service,我一开始认为是network service,可是测试下来要把network账号放入 BizTalk Isolated Host Users 组才行。

    如何把简单类型转变为输出需要的消息?这点能说明一下吗?是不是使用Message Assignment形状,里面的语句怎么写呢?
    2009年3月20日 1:27
  • 关于第一个pool的帐号问题,请参考这篇文章:http://www.cnblogs.com/chnking/archive/2006/06/10/422639.html

    至于你说的“如何把简单类型转变为输出需要的消息?”,你的说的“输出需要的消息”是不是一个有架构的消息?
    你需要做的是新建一个输出的有架构的消息,然后把WS的返回的简单类型赋给消息中的某个element。
    至于怎么从零新建一个架构消息,请参看:biztalk中使用.net class类型的消息(一) -- 相关知识介绍 ,其中的“七.   Orchestration中从零开始新建一个xml类型的消息”
    专注于biztalk。 chnking.cnblogs.com
    • 已标记为答案 GaryZhang 2009年5月11日 4:47
    2009年3月20日 2:39
  • 谢谢版主提供的资源,这个对我们初学者太有用了。
    2009年3月20日 3:17