今天和昨天,我花了几个小时来研究如何使用C#主机获取Chrome本机消息。再次尝试使用Java Host,并且也遇到了相同的错误。 在这些问题的帮助下,我尝试了几次,但都没有成功:
C# native host with Chrome Native Messaging
Native messaging from chrome extension to native host written in C#
Very Slow to pass "large" amount of data from Chrome Extension to Host (written in C#)
尝试使用VStudio 2017、2019,c#4.7,c#客户端配置文件4.0; 使用Java,尝试使用JRE 8,JRE 11,并出现相同的错误。 使用Python,测试成功了,为什么? (二进制模式有效吗?)项目管理器唯一可接受的解决方案是C#...
static void Main(string[] args)
{
bool platform64 = true;
if (IntPtr.Size == 8)
platform64 = true;
else
platform64 = false;
logger.InfoFormat("Platform x64?: {0}", platform64);
logger.InfoFormat("Arguments:");
foreach (String arg in args)
{
logger.InfoFormat(" arg: {0}", arg);
}
JObject data;
while ((data = Read()) != null)
{
var processed = ProcessMessage(data);
SendMessage(processed);
if (processed["text"].Value<string>().Equals("exit"))
{
return;
}
}
}
public static JObject Read()
{
logger.Debug("Init Read()...");
var stdin = Console.OpenStandardInput();
var lengthBytes = new byte[4];
stdin.Read(lengthBytes, 0, 4);
var length = BitConverter.ToInt32(lengthBytes, 0);
logger.DebugFormat("Length of bytes...{0}", length);
var buffer = new char[length];
var input = "";
for (int i = 0; i < length; i++)
input += (char)stdin.ReadByte();
return JsonConvert.DeserializeObject<JObject>(input);
}
public static void SendMessage(JObject data)
{
var bytes = System.Text.Encoding.UTF8.GetBytes(data.ToString(Formatting.None));
var stdout = Console.OpenStandardOutput();
stdout.WriteByte((byte)((bytes.Length >> 0) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 8) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 16) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 24) & 0xFF));
stdout.Write(bytes, 0, bytes.Length);
stdout.Flush();
}
从Google的文档中,关于二进制格式和StackOverflow的信息,有谁知道可以使之工作的原因,并且Google与Host通信吗?
发送本机消息的示例(直接):
chrome.runtime.sendNativeMessage('com.otisw.signer',
{ text: "list" },
function (response) {
console.log("Received " + response);
});
答案 0 :(得分:0)
它正在工作。您不会相信,但是删除了 log4net 依赖项后,主机开始进行通信。 仅在导入依赖项和时,它也起作用,但是当我习惯于 logger.debug()方法时,该插件再次停止工作。也许log4net从控制台使用流。 感谢您的帮助@wOxxOm,我已经修改了Write方法以使用BitConverter。