WCF 4.5支持GZIP,无需第三方库或手写扩展.我通过TCP Binding得到它,但找不到通过HTTP绑定使其工作的方法.我的wcf - 服务是自我托管在Windows服务中.
插件:我不允许使用IIS; 我无法切换到任何WCF替换.
这适用于gzip:
binding="customBinding" bindingConfiguration="tcpCompressionBinding" name="tcp"
Run Code Online (Sandbox Code Playgroud)
这就是我目前用于http的内容:
binding="basicHttpBinding" bindingConfiguration="httpBinding" name="http"
Run Code Online (Sandbox Code Playgroud)
该文档并没有真正帮助我:http: //msdn.microsoft.com/en-us/library/dd456789.aspx.
但是,据此,它应该工作:
从WCF 4.5开始,WCF二进制编码器增加了对压缩的支持.使用CompressionFormat属性配置压缩类型.客户端和服务都必须配置CompressionFormat属性.压缩适用于HTTP,HTTPS和TCP协议.如果客户端指定使用压缩但服务不支持它,则抛出协议异常,指示协议不匹配.有关更多信息,请参阅选择消息编码器
我有一个完整的ASP.NET MVC应用程序(由5个程序集组成,.NET 4.5.1,ASP.NET MVC 5.2.2),它在Visual Studio(使用IISExpress)中运行良好.
我现在想要一个控制台应用程序,它接受MVC应用程序并托管它(自托管).
我尝试过Microsoft.Owin.Host.HttpListener,Nancy.Owin但是当我得到404页面时,我的配置缺少映射到我的MVC应用程序.
我有
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}
Run Code Online (Sandbox Code Playgroud)
和
static void Main(string[] args)
{
StartOptions so = new StartOptions("http://localhost:9000/");
using (WebApp.Start<Startup>(so))
{
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
但显然MyMvcApplication缺少从正在运行的MVC应用程序中使用的配置.怎么做?或者如何自我托管呢?
我在网上找到的答案是指旧版本,我希望今天有更简单的方法.
我正在开发一个自托管的ASP.NET web api-application.一切正常,但现在我正在努力HttpContext:
我需要从客户端保存会话信息.但HttpContext.Current总是空的.所以很明显我HttpSelfHostServer不使用静态HttpContext-Class.
我不明白的是:为什么......?而且我无法想办法既不告诉也HtttpSelfHostServer不能HttpSelfHostConfiguration合作HttpContext.
这是我正在做的事情:
创建一个 HttpSelfHostConfiguration
Service-Resolvers&RoutesUserNamePassword-Validator使用config创建新的HttpSelfHostServer实例
server.OpenAsync().Wait()任何帮助我如何告诉我的服务器工作HttpContext.Current非常感谢!干杯!
我目前正在开发一个C#项目,它是一个控制台应用程序,其中包含一个WCF soap服务.
下面是我用来打开主机的代码.
var baseAddress = new Uri(Configuration.soapServerSettings.soapServerUrl);
var host = new ServiceHost(typeof(SoapServer), baseAddress);
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
var meta = new ServiceMetadataBehavior()
{
HttpGetEnabled = true,
HttpGetUrl = new Uri("", UriKind.Relative)
};
host.Description.Behaviors.Add(meta);
var debugBehaviour = new ServiceDebugBehavior()
{
HttpHelpPageEnabled = true,
HttpHelpPageUrl = new Uri("", UriKind.Relative),
IncludeExceptionDetailInFaults = true
};
ServiceEndpoint endpnt = host.AddServiceEndpoint(
typeof(ISoapInterface),
basicHttpBinding,
"EmailServer");
host.Description.Behaviors.Remove(typeof(ServiceDebugBehavior));
host.Description.Behaviors.Add(debugBehaviour);
host.Open();
Run Code Online (Sandbox Code Playgroud)
这在Windows上完全正常,但在Linux上,当我浏览到它时,我收到以下消息:
XmlSchema错误:命名项 http://schemas.microsoft.com/2003/10/Serialization/:anyType已包含在架构对象表中.考虑将MONO_STRICT_MS_COMPLIANT设置为"是"以模仿MS实现.相关架构项SourceUri:,第3行,第3位.
我不知道从哪里开始研究这个问题.
感谢您的任何帮助,您可以提供
更新:
根据Rob Goodwins的建议,我添加了MONO_STRICT_MS_COMPLIANT环境变量,它看起来确实有效,我可以访问该服务.但是,我现在遇到了另一个问题.我有一个PHP页面,它每隔几秒就会发出几个请求,但过了一分钟后,我的应用程序崩溃了.
我得到以下异常:
此XmlWriter在此状态下不接受StartTag错误.在System.Xml.XmlTextWriter.WriteStartElement(System.String前缀,System.String localName,System.String namespaceUri)[0x00000] in:0 at …
我使用Owin自托管控制台应用程序建立了一个网站.我正在提供静态文件没有问题,网站静态部分的"根"正常工作,并且Web API路由也正常工作.
如果我浏览到:
http://localhost/index.html
Run Code Online (Sandbox Code Playgroud)
它呈现了我所期望的一切.但我还没弄清楚如何设置它以便浏览:
http://localhost
Run Code Online (Sandbox Code Playgroud)
提供index.html(作为默认视图).这是在IIS风格的网站下工作.如何使其与Owin自我主机一起使用?
当我尝试在LINQPad中使用Selfhosted WebAPI时,我只是得到了相同的错误,该类的控制器不存在.
我是否必须为WebAPI(控制器/类)创建单独的程序集,然后在我的查询中引用它们?
这是我正在使用的代码
#region namespaces
using AttributeRouting;
using AttributeRouting.Web.Http;
using AttributeRouting.Web.Http.SelfHost;
using System.Web.Http.SelfHost;
using System.Web.Http.Routing;
using System.Web.Http;
#endregion
public void Main()
{
var config = new HttpSelfHostConfiguration("http://192.168.0.196:8181/");
config.Routes.MapHttpAttributeRoutes(cfg =>
{
cfg.AddRoutesFromAssembly(Assembly.GetExecutingAssembly());
});
config.Routes.Cast<HttpRoute>().Dump();
AllObjects.Add(new UserQuery.PlayerObject { Type = 1, BaseAddress = "Hej" });
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
using(HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Server open, press enter to quit");
Console.ReadLine();
server.CloseAsync();
}
}
public static List<PlayerObject> AllObjects = new List<PlayerObject>();
public class PlayerObject
{
public uint Type { get; …Run Code Online (Sandbox Code Playgroud) 我们正在使用play 2.1.1将新应用程序部署到生产环境中,并且正在解决它的一些实际问题,并且非常有限的文档没有多大帮助......
所以是时候更新到新版本了,我们运行了常用的停止/升级/启动脚本,但是它们失败了.出于某种原因,游戏拒绝应用演变.开始时一直说
哎呀,无法启动服务器.@ 6elnj89fh:数据库'默认'需要进化!
即使我们尝试applyEvolutions.default=true通过命令行和application_prod.conf文件设置它们.它还抱怨说
警告!此脚本包含可能具有破坏性的DOWNS演变
这对我来说没有多大意义,因为我们在版本上升所以不应该应用下降.但似乎这可能是它拒绝应用演变的原因.
在这一点上,我并不那么担心,因为我认为有一些手动方式来应用进化.经过广泛的搜索后,它看起来好像......在游戏1中有支持,但在游戏中没有.2.在开发模式下,您只需按下浏览器中的按钮即可应用演变,但在生产模式下我找不到任何方式手动应用进化.这是真的还是我错过了?我真的认为这是一个重要的功能!(在后面的视线中我可以手动应用脚本并禁用evolutions插件,但之后我会丢失evolutions跟踪,这很有用..)
我也想知道你将如何"支持"你的数据库,因为我相信我们会在某些时候需要做到这一点.如果有一种手动方式来执行此操作,则可能会有一个可选的版本参数来降级数据库.例如,如果您处于版本5并且需要返回到4,那么您将运行play apply-evolutions 4该版本,然后应用版本5的版本并相应地更新evolutions db.我可以手动应用下降,但问题是进化db将再次处于无效状态...
越来越绝望我尝试了所有我能找到的设置再次启动服务器并添加了-DapplyDownEvolutions.default=true选项.我假设这个设置仅在选择降级数据库时会应用下降(虽然似乎没有这样的选项)但实际上做的是应用ups然后立即应用下降(我在故障排除后发现这个服务器现在终于启动了 - 没有任何消息 - 但在访问该站点时给出了一个神秘的错误消息).是这个设置应该做什么?如果是,我无法理解为什么设置甚至存在.我想不出任何你希望在迁移到更新的数据库版本时应用ups然后立即降低的情况.有人可以对这个设置有所了解吗?
此时,我终于可以通过手动重新运行相应的"UP"来再次运行应用程序.
在这一点上,我们正在努力为我们自己的演进处理基本上重新编写脚本,以便更好地控制运行的内容并启用返回..为此能够使用播放功能会更好我希望有人可以对此有所了解.如果没有,也许这个咆哮可以帮助处于类似情况的人......
我正在编写一个通过WCF公开服务的应用程序.该服务是自托管的(控制台应用程序),需要使用Singleton实例.我试图弄清楚如何在服务配置中指定单例,而不使用服务实现上的属性.是否可以在没有属性的代码中指定单例?
谢谢,埃里克
当Teamcity运行启动自托管Web应用程序的集成测试时,测试将失败并显示错误:
System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener
Run Code Online (Sandbox Code Playgroud)
抛出此错误的代码是:
var webApp = WebApp.Start<Startup>("http://*:52203/")
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio(使用Resharper测试运行器)执行测试时运行正常.Teamcity配置为使用JetBrains.BuildServer.NUnitLauncher.exe可执行文件来运行测试.
我看到很多关于这个错误的帖子与Microsoft.Owin.Host.HttpListener.dllbin 有关,因为bin\debug或bin\release文件夹中没有.我可以确认此文件(以及随附的.xml文件)都存在于TeamCity buildAgent使用的bin\release文件夹中.没有bin\debug文件夹.
使用SslStream和socket,我从头开始开发了一个https Web服务器.我可以将证书应用于来自C#代码的流并处理请求.
但是,我并没有弄清楚如何用Owin做到这一点.有没有人知道如何将证书绑定到自托管控制台应用程序?
例:
// Bind the below certificate to Owin host
var certificate = new X509Certificate2("server.pfx", "password");
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅下面的现有Owin主机代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin.Hosting;
using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>;
namespace Owin.Startup
{
class Program
{
static void Main(string[] args)
{
int port = 8888;
string url = $"http://localhost:{port}";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine($"Hosted: {url}");
Console.ReadLine();
}
}
}
public class Startup
{
private IAppBuilder app;
public void Configuration(IAppBuilder app)
{
#if DEBUG
app.UseErrorPage(); …Run Code Online (Sandbox Code Playgroud) self-hosting ×10
c# ×5
owin ×4
wcf ×3
.net ×2
asp.net ×1
asp.net-mvc ×1
httpcontext ×1
katana ×1
linqpad ×1
mono ×1
nancy ×1
production ×1
ssl ×1
teamcity ×1