当使用 IXiContext.GetXiEncode() 构造 XiUserInfo 时,与 OPC .NET 服务器的连接失败
A connection to the OPC .NET server fails when IXiContext.GetXiEncode() is used to construct XiUserInfo
我最初在尝试从远程计算机连接到 DeltaV OPC .NET 服务器时遇到了问题。但是,每次连接都会失败,我不知道为什么。这是我写的代码:
public XiUserInfo Credentials(string username, string password)
{
XiEncode rsaParamater = XiContext.GetXiEncode();
return new XiUserInfo(RSAparamater.Encode, username, password);
}
public static void CreateContext(XiUserInfo credentials)
{
ServiceEndpoint sep;
sep = iEndpointDiscovery.GetServiceEndpointsByBinding("IResourceManagement", typeof(NetTcpBinding)).First();
if (credentials != null)
{
iContext = XiContext.Initiate(sep, iEndpointDiscovery.ServerEntry,
300000, (uint)ContextOptions.EnableDataAccess,
(uint)System.Threading.Thread.CurrentThread.CurrentCulture.LCID,
Guid.NewGuid().ToString(), credentials);
}
}
我有 Xi 客户端 dll 的源代码,所以我查看了源代码并找出了我哪里出错了。错误在 Credentials 方法中。
private XiUserInfo Credentials( string username, string password)
{
XiEncode rsaParameter = XiContext.GetXiEncode();
XiUserInfo xiUserInfo = new XiUserInfo( rsaParaeter.Encode, username, password );
xiUserInfo.Id = rsaParameter.Id;
return XiUserInfo;
}
XiContext.GetXiEncode() returns 具有两个属性的 XiEncode 实例。 public RSAParameters 和 GUID。但是,该方法还将私有 RSAParameters 添加到 XiContext class 中的私有字典中,并使用 GUID 作为键。
当 XiUserInfo 被初始化时,它使用 public 密钥对传入的用户名和密码进行加密。当调用 XiContext.Initiate 方法时,在其调用堆栈中,它会调用一个解密凭据的方法,但它需要字典中的 GUID 才能检索私钥。因此,xiUserInfo 中的 Id 属性 需要设置为来自 XiEncode 实例的 Id(具有 GUID)。
我最初在尝试从远程计算机连接到 DeltaV OPC .NET 服务器时遇到了问题。但是,每次连接都会失败,我不知道为什么。这是我写的代码:
public XiUserInfo Credentials(string username, string password)
{
XiEncode rsaParamater = XiContext.GetXiEncode();
return new XiUserInfo(RSAparamater.Encode, username, password);
}
public static void CreateContext(XiUserInfo credentials)
{
ServiceEndpoint sep;
sep = iEndpointDiscovery.GetServiceEndpointsByBinding("IResourceManagement", typeof(NetTcpBinding)).First();
if (credentials != null)
{
iContext = XiContext.Initiate(sep, iEndpointDiscovery.ServerEntry,
300000, (uint)ContextOptions.EnableDataAccess,
(uint)System.Threading.Thread.CurrentThread.CurrentCulture.LCID,
Guid.NewGuid().ToString(), credentials);
}
}
我有 Xi 客户端 dll 的源代码,所以我查看了源代码并找出了我哪里出错了。错误在 Credentials 方法中。
private XiUserInfo Credentials( string username, string password)
{
XiEncode rsaParameter = XiContext.GetXiEncode();
XiUserInfo xiUserInfo = new XiUserInfo( rsaParaeter.Encode, username, password );
xiUserInfo.Id = rsaParameter.Id;
return XiUserInfo;
}
XiContext.GetXiEncode() returns 具有两个属性的 XiEncode 实例。 public RSAParameters 和 GUID。但是,该方法还将私有 RSAParameters 添加到 XiContext class 中的私有字典中,并使用 GUID 作为键。
当 XiUserInfo 被初始化时,它使用 public 密钥对传入的用户名和密码进行加密。当调用 XiContext.Initiate 方法时,在其调用堆栈中,它会调用一个解密凭据的方法,但它需要字典中的 GUID 才能检索私钥。因此,xiUserInfo 中的 Id 属性 需要设置为来自 XiEncode 实例的 Id(具有 GUID)。