我想公开一些Web服务,但考虑将其作为Windows服务托管,而不是在IIS中托管.
这是一个好习惯吗?
如是?我该如何保护它?
我想对访问它的用户进行身份验证(针对我们的自定义安全数据库,并且还要确保请求来自我们的业务伙伴(X.509证书????对此不起作用).
感谢你在这方面的指示.
感谢和问候,Ajay
托管选项是否会影响WCF服务可以处理的请求量?
我发现了Microsoft构建的几个版本的无IIS的Cassini网络服务器.我会用它,但我不确定哪一个是最好的,因为有很多分叉/构建:
UtiDev Cassini(不是直接的Cassini端口/叉子,但足够接近)
你推荐什么样的Web服务器上面的分叉; 是Hostable Web Core新的Cassini,还是我仍然依赖于HWC的IIS?
如果你详细说明,我会很感激:
昨天我在我的网络上设置了一个本地主机,现在正在努力使它成为一个公共网站.我读到,使用WAMP自托管网站可能非常不安全,并且存在很高的安全风险.这是真的?我如何使我的WAMP服务器安全?我目前有Windows Vista(最新的服务包),卡巴斯基Pure 3.0和WAMP 2.2.
如果您可以发布解决方案,或保持我的自托管网站安全的提示,将不胜感激!
谢谢!
我有一个自定义的WebApi应用程序 MediaTypeFormatter
根据"name"参数(或由此部分URL),应用程序应将请求主体格式化为不同的类型.
这是行动
// http://localhost/api/fire/test/
// Route: "api/fire/{name}",
public HttpResponseMessage Post([FromUri] string name, object data)
{
// Snip
}
Run Code Online (Sandbox Code Playgroud)
这是自定义的MediaTypeFormatter.ReadFromStreamAsync
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
var name = "test"; // TODO this should come from the current request
var formatter = _httpSelfHostConfiguration.Formatters.JsonFormatter;
if (name.Equals("test", StringComparison.InvariantCultureIgnoreCase))
{
return formatter.ReadFromStreamAsync(typeof(SomeType), readStream, content, formatterLogger);
}
else
{
return formatter.ReadFromStreamAsync(typeof(OtherType), readStream, content, formatterLogger);
}
}
Run Code Online (Sandbox Code Playgroud) 我想在我的自托管WCF服务中拥有一个SSL端点,该端点可以接受具有HTTP基本身份验证凭据或客户端证书凭据的请求.
对于IIS托管服务,IIS区分"接受客户端证书"和"需要客户端证书".
WCF WebHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;似乎是IIS中"需要证书"设置的模拟.
有没有办法配置WCF自托管服务来接受客户端证书凭据,但不是每个客户端都需要它们?是否存在用于自托管WCF服务的IIS"接受客户端证书"的WCF模拟?
在自托管应用程序中使用SignalR 2.0,根据这些说明,您可以这样:
class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(new HubConfiguration { Resolver = ... });
}
}
class Program
{
static void Main(string[] args)
{
using (WebApp.Start("http://localhost:8080")) // constructs Startup instance internally
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您会注意到Startup类实例是使用一些幕后魔术创建的.我无法弄清楚如何填写依赖关系.有没有办法覆盖Startup类的构造,以便我可以注入依赖项?
我有OWIN服务器作为控制台应用程序的一部分.你可以在这里看到主要方法:
class Program
{
public static ManualResetEventSlim StopSwitch = new ManualResetEventSlim();
static void Main(string[] args)
{
Console.CancelKeyPress += (s, a) =>
{
a.Cancel = true;
StopSwitch.Set();
};
using (WebApp.Start<Startup>("http://+:8080/"))
{
Console.WriteLine("Server is running...");
Console.WriteLine("Press CTRL+C to stop it.");
StopSwitch.Wait();
Console.WriteLine("Server is stopping...");
}
Console.ReadKey();
Console.WriteLine("Server stopped. Press any key to close app...");
}
}
Run Code Online (Sandbox Code Playgroud)
当请求的处理稍微长一点并且同时用户按下CTRL + C以停止应用程序时,立即停止请求处理并且不发送响应.是否有可能改变这种行为?我想拒绝所有新请求,但要等到当前正在处理的请求完成并在此之后停止服务器.
我最初的想法是创建OWIN中间件,它将跟踪当前正在处理的请求并推迟停止操作直到一切都完成.中间件还会在停止阶段将所有请求短路.但这个解决方案对我来说听起来不太好.
我有一个应用程序自托管OWIN应用程序,我想从所有响应中删除Server标头("Microsoft-HTTPAPI/2.0").在Google上搜索时,它看起来非常简单,例如MSDN上的这篇博文显示了一个看起来非常简单的解决方案.我按照说明操作:
结果非常令人失望,没有任何改变,我仍然得到Server头.令我感到困惑的是,所有解决方案都完全相同,对他们来说似乎有效.还有什么需要做的才能从自托管的OWIN应用程序中删除Server标头吗?
更新 我尝试自己添加一个服务器头,它实际上工作,但它仍然添加了Microsoft-HTTPAPI/2.0.
将此代码添加为DelegatingHandler:
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
response.Headers.Server.Add(new ProductInfoHeaderValue("Foo", "1.0"));
Run Code Online (Sandbox Code Playgroud)
生成此服务器标头:服务器:Foo/1.0 Microsoft-HTTPAPI/2.0
我正在尝试调查3.0版已经发布到点网核心的可行性。我们的关键组件之一允许我们(私有)的nuget创建自己的WebAPI,向消费者提供事件和方法。这支持远程服务控制或远程服务配置之类的功能,从而允许api提供远程配置设置/检索等。
此功能是我们微服务架构当前工作方式的关键。
我正在尝试使用dotnet核心复制此内容,但是,我一直在努力寻找直接等效的教程/场景。我们基本上遵循此处详述的过程:
但是,在检查了nuget软件包的兼容性(并且一切看起来都很好..)之后,我现在在调用时仅获得空引用异常 WebApp.Start<Startup>(baseaddress);
空引用异常显然是由于nuget软件包与.net内核不兼容而调用的,请参见此处:
链接中提供的解决方案是一种方法,但是它使用了第三方应用程序-NancyFx。有什么方法可以以当前形式使用dotnet core实现相同的功能?以前有足够的有关自托管的文档,但是不幸的是,鉴于aspnet内核以其自己的进程运行,因此很难找到解决方案!
代码如下所示
//the external library would contain all this code. I.e. this could present the configuration endpoints as mentioned above.
public class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { …Run Code Online (Sandbox Code Playgroud)