我已配置一个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方法的限制。
任何人都可以帮助我吗?
提前致谢!!!
答案 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)