我遇到了这个宝石,它似乎与我想要的很接近.但是,我想使用已引用的程序集中已编写的控制器.
我的第一个破解是引用程序集,设置路由规则与原始webAPI项目相同并且去,但每次尝试调用自托管服务时我都会得到400.我已经用Fiddler选择了请求的内部,除了地址差异之外,对webAPI项目和自托管项目的请求是相同的.
我觉得这应该是相对简单的,但我没有找到一个可以接受的答案.
我使用Visual Studio 2012(.NET Framework 4.5)创建了一个SelfHosted AspNet WebAPI.我为WebAPI启用了SSL.在同一项目中定义控制器时,它工作正常.
但是当我添加另一个包含控制器的项目的引用时,它给出了以下错误:
No HTTP resource was found that matches the request URI 'https://xxx.xxx.xxx.xxx:xxxx/hellowebapi/tests/'.
我已经为HttpSelfHostConfiguration和MessageHandler创建了自定义类.
解决这个问题的任何帮助对我来说都是一个很好的时间.
提前感谢.
我的应用程序使用ASP.NET Web API的自托管功能.我使用的NuGet包名是Microsoft.AspNet.WebApi.SelfHost.我使用以下示例作为基础.
以下代码适用于在ipv4 localhost端点上启动主机:
WebApp.Start<Startup>("http://127.0.0.1:43666");
Run Code Online (Sandbox Code Playgroud)
如果我想指定ipv6地址,我该怎么办?"http:// [:: 1]:43666"不起作用.抛出的异常是[重新格式化]:
System.Net.HttpListenerException: The network location cannot be reached. For information
..about network troubleshooting, see Windows Help
at System.Net.HttpListener.AddAllPrefixes()
at System.Net.HttpListener.Start()
at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(HttpListener listener,
..Func`2 appFunc, IList`1 addresses, IDictionary`2 capabilities, Func`2 loggerFactory)
at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(Func`2 app,
..IDictionary`2 properties)
Run Code Online (Sandbox Code Playgroud)
通过检查反射器中的代码来判断,该HttpAddUrlToUrlGroup函数返回错误代码1232
我有一个使用Microsoft.AspNet.WebApi.OwinSelfHost的简单项目.这是一个Owin自托管WebApi 2项目.该项目非常类似于: -
https://github.com/attilah/AngularJSAuthentication
我唯一的区别是我的安全模块是在单独的程序集中(一切类似于上面的项目).我使用Autofac来解决我的依赖关系.
当没有Autofac时,这个项目有效.但是,一旦我尝试使用相应的安全模块和Autofac设置我的项目,我面临的是这个错误: -
Could not load file or assembly 'System.Web.Http, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)
我的配置非常受这个帖子的启发: -
依赖注入无法与Owin自托管Web Api 2和Autofac一起使用
此外,我发现其他人在努力解决Autofac的这种依赖性问题,并且能够通过重新安装Microsoft.AspNet.WebApi.WebHost来解决类似的问题:
在Web API 2和.NET 4.5.1迁移之后,GlobalConfiguration.Configure()不存在
但这对我不起作用我不知道为什么.我试过从头开始重新安装一切也没有帮助.除了Autofac在重新安装时还有几个权限问题这一事实.
有人有这个错误的经验吗?请帮忙.谢谢!
我已经回答了我自己的问题,稍后可能会更新这个问题,以反映我的起点/为实现解决方案而采取的步骤,但我想我会问一个我开始的问题,结果让我感到不合理经过许多小时的研究、反复试验才得以实现。请进行任何编辑,或提出您自己的 postfix/main.cf 解决方案,因为我还有很多东西要学习。
问题简介
因此,我在“example.com”的服务器上自行托管了一些内容,并将 Postfix 设置为我的邮件传输代理 (MTA)。在我的邮件服务器上,我有一个 virtual_alias 设置来接收特定“email_users@example.com”的电子邮件到我在服务器上的用户名。我的母校启用了电子邮件转发功能,以便将发送到“student@college.edu”或“alum@alum.college.edu”的电子邮件转发到“email_users@example.com”并在我的用户收件箱中接收。基本上所有电子邮件(发送到我的 .edu 或我的 .com)都会转到 /home/user/Maildir/new。
当使用 MUTT(我首选的 MUA)编写电子邮件时,我偶尔会将电子邮件“发件人”字段更改为“student@college.edu”、“alumnus@alum.college.edu”,或者默认回复任何回复字段已启用。我的邮件服务器出站到其他服务器的所需行为如下:
需要明确的是,当用户希望从以下位置发送邮件时,这是 Postfix 配置的问题:本地 Postfix MTA -> 外部 SMTP 服务器 -> 通过互联网接收者。
这些问题/操作方法通常省略了明确的答案,不是在问同样的事情,而是需要更好的提问标题,或者是仅开始回答此设置的开头的操作方法:
当然,完整的文档很有帮助,但相当冗长,如果您是 Postfix 新手,很难及时理解。例如,您可能希望在 SMTP 中继/访问控制下找到它,但我缺少的主要方面是在SASL Auth中的常规配置下。
Self Host WebApi是一个新手,但我对其易用性和可扩展性印象深刻.至少通过本教程.到目前为止我所做的一切都在我的开发机器上运行,无论我使用的是localhost,127.0.0.1,还是我的LAN Ip(192.168.0.x),但我很困惑为什么我无法从任何其他计算机访问该服务甚至其他计算机在同一个子网中.
简而言之,在运行它的机器上完成教程之后:浏览到
localhost:3636/api/products/
Run Code Online (Sandbox Code Playgroud)
导致预期的xml返回.在局域网上的另一台机器浏览到:
192.168.0.x:3636/api/products/
Run Code Online (Sandbox Code Playgroud)
导致超时数据指向那些可能知道这一切如何相互作用的人:
1.)我的开发机器(192.168.0.x,服务器,主机,无论你想调用它)都有IIS; 我是如此偏执,这是通过管理GUI停止它的方式
2.)我已使用以下命令行执行保留URL /端口:
>netsh http add urlacl url=http://+:3636/ user=DOMAIN\USER listen=yes delegate=yes
>netsh http add urlacl url=http://192.168.0.x:3636/ user=DOMAIN\USER listen=yes delegate=yes
Run Code Online (Sandbox Code Playgroud)
2.b)我已经一起尝试了这两个,并尝试将用户更改为"所有人"无济于事
3.)我试图更改教程中的代码来设置
config.HostNameComparisonMode = HostNameComparisonMode.Exact //default is Strong Wildcard
Run Code Online (Sandbox Code Playgroud)
4.)我可以从LAN上的其他计算机成功ping和tracert到192.168.0.x.
5.)一位朋友建议我设置一个TCPListener并确保我可以远程登录以消除防火墙的可能性.如果这个逻辑是合理的,防火墙不是问题
编辑:感谢您的帮助,这是另一个数据点,我相信它确认它不是防火墙问题.我以前在一个相当迟钝(至少是像我这样的非认证人员)瞻博网络防火墙/路由器后面发布了这个连接.我已经在家庭网络上的另一台机器(没有IIS)上重做教程,但仍无法将服务发布到局域网内的其他计算机上.有任何想法吗?
我有一个在OWIN进程中托管的示例Web API(自托管,而不是在IIS中).我在我的控制器中获得了一个JWT令牌,我希望能够在应用程序的另一部分中进行检索,这是一个实现NserviceBus IMutateOutgoingTransportMessages的类.在我的其他Web应用程序POC(在IIS中托管)中,我使用了一个简单的会话变量,它工作得很好.但我想知道在我的新OWIN自托管环境中最好的方法是什么?静态类中的静态属性?
在WEB API 2 OWIN自我主机项目中,我获得了"访问被拒绝"异常,除了localhost之外的其他任何内容:
string baseUrl = http://localhost:2500;
WebApp.Start<Startup>(baseUrl);
Run Code Online (Sandbox Code Playgroud)
如果我使用127.0.0.1或机器的实际IP地址,我会得到此异常.没有人在他们的博客中提到过这个问题,关于自托管的web api 2 owin.
这是什么问题,如何解决?
我发现这个Self托管了OWIN和urlacl,但我得到了同样的异常抛出.
我正在尝试使用OWIN将Web API应用程序作为Windows服务运行.但是,在尝试启动服务时,我收到以下消息:
本地计算机上的[ServiceName]服务已启动,然后停止.如果某些服务未被其他服务或程序使用,则会自动停止.
出于某种原因,我的服务不明白它应该继续监听http:// localhost:9000
VS解决方案包含两个项目:Web API和Windows服务.
在Windows服务项目中,我有:
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service()
};
ServiceBase.Run(ServicesToRun);
}
}
public partial class Service : ServiceBase
{
private const string _baseAddress = "http://localhost:9000/";
private IDisposable _server = null;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_server = WebApp.Start<Startup>(url: _baseAddress);
}
protected override void OnStop()
{
if (_server != null)
{
_server.Dispose();
}
base.OnStop();
}
}
Run Code Online (Sandbox Code Playgroud)
在 …
我想将SignalR与Owin一起使用.
这两个包之间有什么区别:
Microsoft ASP.NET SignalR OWIN
和
Microsoft ASP.NET SignalR Self Host
何时使用其中一种?
self-hosting ×10
owin ×5
.net ×2
asp.net ×2
c# ×2
autofac ×1
katana ×1
postfix-mta ×1
signalr ×1