0

Microsfot UDDI サーバーを実行するように 1 つの Biztalk サーバーを構成しました。1 つの 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 が ViewAsPublisher.Set(string username) と呼ばれるメソッドを UDDI.Web.DLL の下で使用していることを確認しました。このメソッドは、データを表示するユーザー所有者を設定しますが、クライアント マシンで使用した結果は失敗でした。この DLL はサーバーで使用するために開発されたものであり、クライアントで使用する意味はないと思いますが、Web ユーザー インターフェイスで許可されているものと同様の機能が必要です。

Microsoft.Uddi3.dll も所有権を譲渡する機能を提供しますが、Web UI と同じ動作が必要なだけです。つまり、私が管理者に属しているかのように、実際の所有者であるかのようにプロバイダーを直接変更します。パブリッシャーまたはコーディネーター グループ。

構成の問題なのか、Uddi3 API メソッドの制限なのかはわかりません。

誰でも私を助けることができますか?

前もって感謝します!!!

4

2 に答える 2

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 がスローされます。

ありがとう!!!

于 2014-09-26T09:02:47.300 に答える
0

デビッド、これは設計によるようですね。Ms Uddi は、アクセス制御規則をサポートしています。所有していないレコードを変更するには、アクセス許可を警告するか、管理者としてサインインする必要があります。

于 2014-10-05T22:43:05.717 に答える