1

私は今、この問題で約5日間立ち往生しています。

基本的に、リモート PC から OPC サーバー (Kepware) に接続しようとしています。私が書いたコードは、Kepware がインストールされているサーバー (この例では 192.168.102.104) で実行すると機能します。

ただし、リモート PC から実行すると、次のエラーが発生します。

System.UnauthorizedAccesException: Access is denied 
(Error from HRESULT: 0x080070005 E_ACCESSIFDENIED))

次の手順に従ってサーバーをセットアップしました: http://www.kepware.com/Support_Center/SupportDocuments/Remote%20OPC%20DA%20-%20Quick%20Start%20Guide%20(DCOM).pdf

PC はドメイン内になく、両方の PC に同じパスワードを持つユーザー Administrator が含まれています。

問題がPCのセットアップにあるのか、それとも私のコードにあるのか、誰にでも教えてもらえますか

コード::

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Unmanaged.CoInitializeSecurity(IntPtr.Zero, -1, IntPtr.Zero, IntPtr.Zero,
                                           Unmanaged.RpcAuthnLevel.Connect,
                                           Unmanaged.RpcImpLevel.Anonymous, IntPtr.Zero,
                                           Unmanaged.EoAuthnCap.None, IntPtr.Zero);

            using (new Impersonation("Administrator", "TEST", "Password"))
            {
                OPCServer opcServer = new OPCServer();
                opcServer.Connect("Kepware.KEPServerEx.V5", "192.168.102.104");
                Console.WriteLine(opcServer.ServerName);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Connection error:::\n\n{0}\n\n",ex);
            Console.ReadLine();
        }
        Console.ReadLine();
    }
}

アンマネージ クラス::

partial class Unmanaged
{
    [DllImport("ole32.dll")]
    public static extern int CoInitializeSecurity(IntPtr pVoid, int
        cAuthSvc, IntPtr asAuthSvc, IntPtr pReserved1, RpcAuthnLevel level,
        RpcImpLevel impers, IntPtr pAuthList, EoAuthnCap dwCapabilities, IntPtr
        pReserved3);

    public enum RpcAuthnLevel
    {
        Default = 0,
        None = 1,
        Connect = 2,
        Call = 3,
        Pkt = 4,
        PktIntegrity = 5,
        PktPrivacy = 6
    }

    public enum RpcImpLevel
    {
        Default = 0,
        Anonymous = 1,
        Identify = 2,
        Impersonate = 3,
        Delegate = 4
    }

    public enum EoAuthnCap
    {
        None = 0x00,
        MutualAuth = 0x01,
        StaticCloaking = 0x20,
        DynamicCloaking = 0x40,
        AnyAuthority = 0x80,
        MakeFullSIC = 0x100,
        Default = 0x800,
        SecureRefs = 0x02,
        AccessControl = 0x04,
        AppID = 0x08,
        Dynamic = 0x10,
        RequireFullSIC = 0x200,
        AutoImpersonate = 0x400,
        NoCustomMarshal = 0x2000,
        DisableAAA = 0x1000
    }
}

偽装クラスは、ローカル ユーザーの管理者を偽装するだけです。

これを Kepware を使用してサーバーで実行すると、出力が得られます - Kepware.KepServerEx.V5 クライアント PC で実行すると、上記のエラーが発生します

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

4

問題の原因が見つかりました。

投稿するとすぐにわかるのはなぜですか?

問題は、サーバーのセットアップ方法にありました。ここですべての詳細を説明して退屈させることはしませんが、DCOM 設定 (DCONcnfg 内) の ID が間違ったユーザーに設定されていたことに関係していました。

どうやら、サーバーのセットアップ手順の一部を無視したようです。

誰かの時間を無駄にしてごめんなさい。

于 2013-02-13T09:44:19.597 に答える