无法使用C#使用Microsoft UDDI3 API编辑UDDI提供程序,并且您不是提供者所有者

时间:2014-09-25 10:32:46

标签: api dll provider owner uddi

我已配置一个Biztalk Server来运行Microsfot UDDI服务器。我将一个Active Directory组配置为UDDI的管理员组。

当我使用UDDI Web用户界面时,我可以创建提供程序,并且还可以使用“查看数据拥有者”按钮查看其他用户拥有的数据(提供者,tmodel等)。

我在C#中使用了Microsoft.Uddi3.dll API来创建一个Windows窗体对话框来管理客户端远程应用程序中的UDDI条目,我可以使用它来查看其他用户创建的提供程序,但是对其进行了任何修改。其他用户拥有的提供商正在抛出Microsoft.Uddi3.UserMismatchException(实体uddi:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx不归出版商所有)因为我不是真正的所有者,即使我是其中的管理员UDDI。如果我对我创建的提供程序使用它,该版本工作正常。当我的用户不是创建提供程序的用户时,会出现此问题。

我看到Web UI正在UDDI.Web.DLL下使用一个名为ViewAsPublisher.Set的方法(字符串用户名)来设置您想要查看其数据的用户所有者,但我在客户端计算机上使用它并不成功结果。我认为这个DLL是为在服务器中使用而开发的,没有意义在客户端使用,但我需要一些类似于Web用户界面允许的功能。

Microsoft.Uddi3.dll还提供了转移所有权的功能,但我只需要具有与Web UI中相同的行为,我的意思是直接修改提供者,就好像我是真正的所有者一样toan管理员,出版商或协调员小组。

我不知道这是配置问题,还是对Uddi3 API方法的限制。

任何人都可以帮助我吗?

提前致谢!!!

2 个答案:

答案 0 :(得分:0)

这是我们用来修改提供者的代码(例如名称和描述)。

我们使用_connection参数,该参数与以下信息一起使用:

    private void ConnectToUddi()
    {
        if (!uddiServer.EndsWith("/"))
            uddiServer = uddiServer + "/";
        string inquireURL = uddiServer + "inquire.asmx";
        string publishURL = uddiServer + "publish.asmx";
        string extensionURL = uddiServer + "extension.asmx";

        UddiSiteLocation location = new UddiSiteLocation(inquireURL, publishURL, extensionURL);
        _connection = new UddiConnection(location);
        _connection.AutoGetAuthToken = true;
        _connection.AuthenticationMode = AuthenticationMode.WindowsAuthentication;
    }

然后,此处使用连接:

            BusinessEntity entity = tree.SelectedNode.Tag as BusinessEntity;
            GetBusinessDetail businessDetails = new GetBusinessDetail(entity.BusinessKey);
            BusinessDetail businessDet = businessDetails.Send(_connection);
            if (businessDet != null && businessDet.BusinessEntities.Count > 0)
            {
                BusinessEntity be = businessDet.BusinessEntities[0];
                ProviderProperties providerProperties = new ProviderProperties(be);
                if (providerProperties.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    be.Names[0].Text = providerProperties.ProviderName;
                    if (providerProperties.ProviderDescription.Length > 0)
                    {
                        Description description = new Description(providerProperties.ProviderDescription);
                        be.Descriptions.Clear();
                        be.Descriptions.Add(description);
                    }
                    else
                        be.Descriptions.Clear();
                    SaveBusiness saveBusiness = new SaveBusiness(be);
                    saveBusiness.Send(_connection);

                    BeginRefresh();  
                }
            }

它适用于我创建的提供程序,但是当其他用户尝试修改我的提供程序(例如,名称)并使用API​​时,它会抛出Microsoft.Uddi3.UserMismatchException。

感谢!!!

答案 1 :(得分:0)

大卫,听起来像这是设计的。 Uddi女士确实支持访问控制规则。您必须提醒权限或以管理员身份登录才能更改您不拥有的记录。