Похоже, что для вашего запроса требуется строка с префиксом длины, состоящая из однобайтных символов, поэтому в C # потребуется немного больше работы, которая использует символы Unicode. Я собираюсь предположить, что вы хотите, чтобы ваша строка XML была закодирована с помощью UTF-8. Мы также не сможем использовать строку, чтобы удерживать запрос, когда он был скомпоновано, вместо этого мы будем использовать массив байтов.
using System;
using System.IO;
using System.Text;
class Program
{
static void
Main(string[] args)
{
string xml = "<xml><request>...[snipped for brevity]...</request></xml>";
using ( MemoryStream stream = new MemoryStream() )
{
using ( BinaryWriter writer = new BinaryWriter(stream) )
{
byte [] encodedXml = Encoding.UTF8.GetBytes(xml);
writer.Write(ToBigEndian(encodedXml.Length + 4));
writer.Write(encodedXml);
}
byte [] request = stream.ToArray();
// now use request however you like
}
}
static byte []
ToBigEndian(int value)
{
byte [] retval = BitConverter.GetBytes(value);
if ( BitConverter.IsLittleEndian )
{
Array.Reverse(retval);
}
return retval;
}
}
. Другое замечание заключается в том, что php pack () с параметром «N» заставляет big-endian на ваших ведущих 4 байтах. Поэтому я написал метод ToBigEndian () для обработки преобразования в big-endian на любой платформе.
Пожалуйста, проверьте один раз, что файл knife.rb находится в .chef / knife.rb.
Если не выполнить следующую команду:
knife configure initial
, чтобы она создала knife.rb, то проверьте путь к клиентскому ключу в knife.rb и перепроверьте, является ли client.pem присутствовать на этом месте.
Если это не сработает.
просто перейдите на клиентский узел и удалите client.pem из / etc / chef, затем запустите chef-client, чтобы он снова создал client.pem. Теперь скопируйте этот client.pem на сервер и добавьте это местоположение в knife.rb
Он будет определенно работать:)
В моем случае помогла команда запуска ножа из папки .chef
В дополнение к ответу Джиоти и Алана, вы также можете попытаться создать пользователя из веб-сайта шеф-повара в своем браузере.
Прочтите местонахождение client.pem из knife.rb. Теперь перейдите в браузер и создайте нового пользователя с правами администратора и скопируйте закрытый ключ. Помните, что закрытый ключ больше не будет отображаться, поэтому будьте начеку.
Создайте файл в этом месте и скопируйте содержимое.
Работал для меня, надеюсь, это работает для вас.
Желаем удачи :)