【问题标题】:Cannot load type HttpListener in simple Grapevine server example无法在简单的 Grapevine 服务器示例中加载类型 HttpListener
【发布时间】:2017-04-26 12:07:55
【问题描述】:

我正在尝试使用 Grapevine 来实现一个简单的 C# REST 服务器。我在 OSX 上使用 Xamarin Studio。我把 Grapevine 4.0.0.195 作为一个包拉出来了。

但是,当我尝试运行https://sukona.github.io/Grapevine/ 上给出的示例时,我收到此错误:

System.TypeLoadException:无法加载类型 来自程序集“Grapevine”的“Grapevine.Interfaces.Server.HttpListener”, 版本=4.0.0.195,文化=中性,PublicKeyToken=null'。在 Grapevine.Server.RestServer..ctor () [0x00006] 在 :0 在 TestServer.MainClass.Main (System.String[] args) [0x0000b] 在 /Users/blah/Projects/Test/TestServer/Program.cs:12

我检查了 Grapevine 组件,发现 HttpListener 确实存在。

这是我的Program.cs

using System;
using Grapevine.Server;

namespace TestServer
{
    public sealed class MainClass
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            using (var server = new RestServer())
            {
                server.Start();
                Console.ReadLine();
                server.Stop();
            }
        }
    }
}

【问题讨论】:

  • 我以前没有使用过 Xamarin Studio。我会在 Mac 上安装它,看看能不能复制它。
  • 据我所知,Xamarin 缺乏对System.Net.HttpListenerExtendedProtectionSelector 属性的支持。 2017 年的第一个里程碑是多平台支持,这可能是我们需要解决的问题。同时,请在我们的Gitter room 中提出这个问题,因为我知道那里有些人正在将 Grapevine 与 Mono 一起使用。
  • 我已经记录了这个here的问题
  • 现在有一个 Grapevine 4.1 的 alpha 版本应该可以为您解决这个问题。

标签: c# grapevine


【解决方案1】:

我也遇到了同样的问题,并发现了与 Scott Offen 提到的关于 ExtendedProtectionSelector 的相同响应(顺便说一句,感谢您的出色工作!)。

所以我回到他以前的版本,我能够使用葡萄藤版本 3.1.0 在 xamarin 中制作葡萄藤

它也不能开箱即用(我是为 ios 构建的,如果你在 android 上遇到同样的问题,我是为 ios 构建的)。它会给你一些关于日志记录的错误,所以我在他关于日志记录的代码中到处都做了 Ctrl+F 并更改了它。我几乎注释掉了 EventLogger.cs 中的所有内容

然后在RESTServer中,凡是有EventLogger报错的地方,我都干脆改成Console.Writeline来描述调试时的错误。

祝你好运!

【讨论】:

  • 聊胜于无!顺便说一句,EventLogger 在 4.0 中消失了,很快就会被可选的提供者模式所取代,因此您可以随意管理日志记录。感谢您提供此解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 2017-08-11
  • 2015-07-23
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多