перенесите 32 бита dll, чтобы операционная система на 64 бита работала с regsvr32.exe

Поместите соединение с profile после соединения с watched, которое получает идентификатор другого пользователя.

SELECT p.*, w2.watched, 
COUNT(*) AS num_movies, 
GROUP_CONCAT(w2.watched order by w2.watched) as movies
FROM watched AS w1
JOIN watched w2 ON w2.watched = w1.watched AND w2.users_id != w1.users_id
JOIN users AS u ON u.id = w2.users_id
JOIN profile AS p ON p.users_id = u.id
WHERE w1.users_id = $id
GROUP BY w2.users_id
8
задан Tim Jarvis 20 April 2009 в 13:48
поделиться

2 ответа

You can register the DLL with regsvr32.exe from the C:\Windows\SysWOW64 folder.

However since you can't mix 64/32bit code you'd have to create a C# service running in x86 (see the project properties, platform target) that you can then use from your x64 web app via WCF.

An easier option would be to ask HSBC for a x64 dll.

6
ответ дан 5 December 2019 в 12:12
поделиться

Мы столкнулись с теми же проблемами с интерфейсом HSBC Cpi.

HSBC не предоставляет оболочку .Net и оболочку COM. не может быть вызван из 64-битного приложения.

Это делает развертывание на 64-м сервере (что, вероятно, покрывает 25% новых производственных серверов) практически невозможно.

Мы рассмотрели некоторые из перечисленных подходов, но они выглядели как много работы. В конце концов, немного повозившись, мы придумали собственную реализацию, которая выглядит примерно так это.

Используйте следующий код Java, чтобы получить промежуточный хэш

import java.io.Console;
import java.lang.*;
import java.util.*;
import com.clearcommerce.CpiTools.security.HashGenerator;
import com.clearcommerce.CpiTools.security.SecCrypto;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Vector;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class Extract {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try
        {
            String encryptedKey = "<YOUR SECRET KEY HERE>";
            if (args.length == 1)
                encryptedKey = args[0];

            HexBinaryAdapter hb = new HexBinaryAdapter();
            SecCrypto sc = new SecCrypto();

            byte abyte0[] = sc.decryptToBinary(encryptedKey);
            System.out.println("New Secret Base64 Encoded : " + new String(Base64Coder.encode(abyte0)));
            System.out.println("New Secret Hex Encoded    : " + hb.marshal(abyte0));
            return;
        }
        catch(Exception ex)
        {
            System.out.println("Error:" + ex.getMessage());
        }
    }
}

Затем используйте следующий код .net для вычисления хэша

using System;
using System.Collections.Generic;
using System.Text;

namespace HsbcIntergration
{
    internal static class CpiHashing
    {
        <USE THE VALUE RETURNED FROM THE JAVA CODE HERE>
        private static readonly byte[] _secret = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

        public static string ComputeHash(List<string> inputList)
        {
            return ComputeHash(inputList, _secret);
        }

        public static string ComputeHash(List<string> inputList, byte[] secretData)
        {
            List<string> orderedDataToHash = new List<string>(inputList);
            orderedDataToHash.Sort(StringComparer.Ordinal);

            StringBuilder sb = new StringBuilder();
            foreach (string s in orderedDataToHash)
                sb.Append(s);

            List<byte> dataToHash = new List<byte>();
            dataToHash.AddRange(Encoding.ASCII.GetBytes(sb.ToString()));
            dataToHash.AddRange(secretData);

            System.Security.Cryptography.HMAC sha = System.Security.Cryptography.HMACSHA1.Create();
            sha.Key = secretData;
            return Convert.ToBase64String(sha.ComputeHash(dataToHash.ToArray(), 0, dataToHash.Count));
        }
    }
}
2
ответ дан 5 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: