我正在考虑自我托管我的WCF服务,而不是使用IIS.对我来说一个很大的问题是我是否需要像IIS那样实例化多个服务主机,或者一个就足够了.
除了安全原因,除了隔离外,多个服务主机是否会提供任何好处?
一个servicehost可以同时在一个端点上提供多个连接吗?
有人可以使用在自托管模式下运行的NancyFx发布关于如何上传大文件(例如50MB)的示例.该文件应该从网页发送(method = post; enctype = multipart/form-data).
是否可以在自托管控制台应用程序中使用ServiceStack Mini Profiler?如果是,我应该在哪里放置探查器启用/禁用代码?在ASP.NET托管的ServiceStack中,它通常位于Application_BeginRequest和Application_EndRequest方法中.
我想知道是否可以将结果转换
var hub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
为我实际的ChatHub类.因为GlobalHost.ConnectionManager.GetHubContext<ChatHub>() as ChatHub失败了
在我的ChatHub类中,我有一个方法UpdateTime():
public void SendTimeUpdate(DateTime time, string auth)
{
Clients.All.UpdateTime(time, auth);
}
Run Code Online (Sandbox Code Playgroud)
我想从我的其他班级称呼它.由于我无法转换为ChatHub并调用SendUpdate,我必须去:
GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients.All.UpdateTime(time, auth);
Run Code Online (Sandbox Code Playgroud)
但是,如果我走这条路,方法SendTimeUpdate不会添加到代理脚本/ signalr/hubs中
有这个问题的解决方案吗?我想获取类型化的Hub实例,而不是直接在IHubContext的Clients属性上调用stuff.
我有一个Windows服务(作为LocalSystem运行),它自我托管OWIN服务(SignalR),需要通过SSL访问.
我可以在我的本地开发机器上设置SSL绑定 - 我可以在同一台机器上通过SSL访问我的服务.但是,当我转到另一台机器并尝试运行以下命令时,我收到一个错误:
命令:
netsh http add sslcert ipport=0.0.0.0:9389 appid={...guid here...} certhash=...cert hash here...
Run Code Online (Sandbox Code Playgroud)
错误:
SSL证书添加失败,错误:1312
指定的登录会话不存在.它可能已被终止.
我使用的证书是完全签名的证书(不是开发证书),可以在我的本地开发箱中使用.这就是我在做的事情:
Windows服务启动并使用以下代码注册我的证书:
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
var path = AppDomain.CurrentDomain.BaseDirectory;
var cert = new X509Certificate2(path + @"\mycert.cer");
var existingCert = store.Certificates.Find(X509FindType.FindByThumbprint, cert.Thumbprint, false);
if (existingCert.Count == 0)
store.Add(cert);
store.Close();
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用netsh和以下代码将证书绑定到端口9389:
var process = new Process {
StartInfo = new ProcessStartInfo {
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "cmd.exe",
Arguments = "/c netsh http add sslcert ipport=0.0.0.0:9389 appid={12345678-db90-4b66-8b01-88f7af2e36bf} certhash=" + cert.thumbprint …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的Web Api v2.2自我托管在OWIN
public class StartUp
{
public void Configuration(IAppBuilder appBuilder, IConfigReader configReader)
{
var container = new Container();
container.Register<IConfigReader, ConfigReader>();
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
appBuilder.UseWebApi(config);
}
}
Run Code Online (Sandbox Code Playgroud)
当我然后使用我Main()的:
WebApp.Start(baseAddress, appBuilder =>
new StartUp().Configuration(appBuilder, new ConfigReader()));
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行最后一行时,appBuilder.UseWebApi(config);我得到以下异常:
SimpleInjector.dll中发生了'SimpleInjector.ActivationException'类型的第一次机会异常
附加信息:给定类型IHostBufferPolicySelector不是具体类型.请使用其他一个重载来注册此类型.
完整堆栈:
发生SimpleInjector.ActivationException _HResult = -2146233088
_message =给定类型IHostBufferPolicySelector不是具体类型.请使用其他一个重载来注册此类型.
HResult = -2146233088 IsTransient = false Message =给定类型IHostBufferPolicySelector不是具体类型.请使用其他一个重载来注册此类型.Source = SimpleInjector
StackTrace:at SimpleInjector.Advanced.DefaultConstructorResolutionBehavior.VerifyTypeIsConcrete(Type …
self-hosting simple-injector asp.net-web-api owin asp.net-web-api2
我正在构建一个OWIN自托管Web API 2服务.我需要此服务来公开OData端点.
传统的IIS托管方法涉及App_Start/WebApiConfig.cs:
using ProductService.Models;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// New code:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: builder.GetEdmModel());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在我的自托管解决方案中,没有WebApiConfig.cs这样的东西
我在哪里以及如何指定此OData配置?
我已经在自托管进程(目前是WinForm主机)中成功运行SignalR.客户端可以与他们的浏览器连接并完美交互.当我需要重新启动游戏领域而不完全杀死主机进程时,问题就出现了.在处理了WebApp.Start()返回的IDisposable之后,我重新加载所有业务数据并再次调用WebApp.Start().它似乎工作,没有异常或警告冒出来,但无论是否有新的浏览器窗口或选项卡,来自浏览器的客户端连接都会失败.我在javascript中启用了SignalR跟踪,并通过Fiddler捕获流量./ negotiate调用有效,但是对于WebSockets的/ connect调用在5秒后超时,然后通过所有其他SignalR回退失败.如果我完全杀死主机进程并重新启动它,一切都会很好.通过每次杀死整个过程手动重启是不可行的.我打开了服务器端日志记录,这是我看到的行为:
SignalR.Transports.TransportHeartBeat Information: 0 : Connection a9f279c9-9dcb-4cc2-806b-dd95e96561b4 is New.
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(a9f279c9-9dcb-4cc2-806b-dd95e96561b4)
SignalR.Transports.TransportHeartBeat Information: 0 : Dispose(). Closing all connections
SignalR.Transports.WebSocketTransport Error: 0 : OnError(a9f279c9-9dcb-4cc2-806b-dd95e96561b4, System.Net.WebSockets.WebSocketException (0x80004005): An internal WebSocket error occurred. Please see the innerException, …Run Code Online (Sandbox Code Playgroud) 我必须在Bitbucket和GitLab之间决定存储库托管(是的,它们必须是私有的).我过去曾经使用过Bitbucket,但现在我发现了GitLab,我发现让自托管存储库管理器非常有吸引力.但是,我必须证明使用其中一个(特别是在使用GitLab的情况下,因为假设其安装和配置的开销).
我们必须考虑以下因素:
那么,我应该选择自托管的回购管理器(GitLab),而不是非自托管的(Bitbucket)?
我有Windows服务,在最终用户的计算机上侦听https请求,在这种情况下是否有可接受的创建或分发私钥的方法?我是否应该打包专门针对localhost请求的真正密钥(例如local.mydomain.com)或生成自签名密钥并在安装时添加受信任的根CA?
如果重要,该服务使用Nancy Self Host处理请求,并在SYSTEM用户上运行.我们有一个运行在https上的Web应用程序,它将向服务发出CORS请求,用户将在标准Web浏览器(> = IE10)上使用它.只有安装了服务的机器才会向其发出请求.
谢谢.
self-hosting ×10
c# ×4
owin ×3
signalr ×2
.net ×1
.net-4.5 ×1
bitbucket ×1
file-upload ×1
git ×1
gitlab ×1
https ×1
large-files ×1
nancy ×1
performance ×1
profiler ×1
servicehost ×1
servicestack ×1
signalr-hub ×1
ssl ×1
wcf ×1