首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WCF服务的批量寄宿

如果采用自我寄宿的方式,我们需要为每个寄宿的服务创建ServiceHost对象。但是一个应用往往具有很多服务需要被发布,基于单个服务的ServiceHost的创建将会变成一个很繁琐的事情。...这种做法是不被推荐的,原因有二: 配置元素的name属性并不是寄宿服务的类型全名,而是通过ServiceBehaviorAttribute特性对应的服务配置名称; 即使我们不对服务的配置名称作显式设置...ServiceHostCollection本质上就是一个ServiceHost的集合,我们可以通过构造函数和自定义的Add方法为指定的一组服务类型创建ServiceHost。...方法实现了对所有ServiceHost对象的批量开启。...ServiceHostCollection还实现了IDisposable接口,并在Dispose方法中实现了对ServiceHost的批量关闭。

549100

WCF服务发布到IIS时候,只能根据hostname访问,不能根据IP地址访问的解决办法

发布后,在浏览器中访问http://ip/Service.svc,可以正常浏览,但svcutil.exe 显示的是域名:http://域名/Service.svc。...在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下: URI http://ip/Service.svc 处的文档未被识别为已知的文档类型。...如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。 解决方案: 网上看了很多帖子,有说ip绑定的,有说设置防火墙的,等等,试过都不行。...: ip 域名 例如:102.54.94.97     rhino.acme.com 2、上面的办法,显然很山寨,我们不能要求使用服务的每一个客户端都去修改自己的hosts文件。...然后修改wcf的配置文件,添加红色部分部门,或者通过wcf配置文件编辑器,添加useRequestHeadersForMetadataAddress配置 <serviceBehaviors

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    WCF后续之旅(12): 线程关联性(Thread Affinity)对WCF并发访问的影响

    ,service操作的执行将在该SynchronizationContext下执行(也就将service操作包装成delegate传入SynchronizationContext的Send或者Post方法...正因为如此,当我们通过Windows Form Application进行WCF service的host的时候,将会对service的并发执行带来非常大的影响。...详细讲,由于WindowsFormsSynchronizationContext的Post或者Send方法,会将目标方法的执行传到UI主线程,所以可以说,所有的service操作都在同一个线程下执行,如果有多个...client的请求同时抵达,他们并不能像我们希望的那样并发的执行,而只能逐个以串行的方式执行。...我们照例创建如下的四层结构的WCF service应用: 1、Contract:IService 1: namespace Artech.ThreadAffinity2.Contracts

    26520

    Wcf:可配置的服务调用方式

    添加wcf服务引用时,vs.net本来就会帮我们在app.config/web.config里生成各种配置,这没啥好研究的,但本文谈到的配置并不是这个。...先看下面的图: 通常,如果采用.NET的WCF技术来架构SOA风格的应用,我们会把项目做一些基本的分层,如上图: 01. contract层:通常定义服务的接口(即服务契约ServiceContract...,指明该服务提供了哪些方法可供外部调用)、以及接口方法中传输的Model定义(即:数据契约DataContract,指明方法中的对象参数的Class定义) 02. implementation层:即服务接口的实现...03. host层:wcf最终需要一个宿主环境,如果是web应用,最简单的办法莫过于直接寄宿在IIS上 04. client层:即服务的消费方,如果是b/s应用,通常就是一个web application...实际部署时,一般将wcf服务层和client层分开部署,如下图: 如果并发数随着业务的增长而增长,不管是client层的website,还是服务层的service,加上其它技术,比如集群或负载均衡之类

    1.2K90

    WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘

    我们可以通过一种简单的方式来证明这一点。 假设我们有一个WCF服务需要通过IIS进行寄宿,并把WCF服务相应的.svc文件定义在一个对应于某个IIS虚拟目录的ASP.NET Website中。...此外,HttpModule注册的操作会先于定义在global.asax的Application_PostAuthenticateRequest方法执行,那么在整个服务调用过程中,只有Application_BeginRequest...可见仅仅这两个方法被成功执行,Application_PostAuthenticateRequest方法却没有被执行。可以想象,后续的事件也不可能被触发,如图2所示。 ?...服务的寄宿发生在对服务.svc文件的第一次访问,具体的实现很简单:ServiceMode根据请求的目的地址加载相应的.svc文件,通过解析定义在指令的Factory和Service...在默认的情况下,不论采用何种寄宿方式,WCF本身的行为应该保持一致。所以,让WCF 服务的行为独立于寄宿的环境与传输协议,是采用并行模式的主要原因。

    1.3K100

    WCF技术剖析之二十九:换种不同的方式调用WCF服务

    我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置;通过ChannelFactory创建服务代理对象。...在WCF客户端元数据架构体系中,利用MetadataExchangeClient可以获取服务的元数据,而利用MetadataImporter将获取的元数据导入成ServiceEndpoint对象。...在本例中,我们将利用这两个组件定义了一个独特的服务调用的简单的例子,相信可以帮助读者进一步加深对WCF元数据框架体系的理解。...(Source从这里下载) 我们依然采用我们熟悉的计算服务的例子,下面是该服务相应的服务契约、服务类型的定义和寄宿该服务采用的配置。...接下来,我们将基于ICalculator接口的服务契约添加到该WsdlImporter的已知契约列表中,调用ImportAllEndpoints方法得到导入的ServiceEndpoint列表。

    76560

    WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?

    服务寄宿的方式大体分两种:一种是为一组WCF服务创建一个托管的应用程序,通过手工启动程序的方式对服务进行寄宿,所有的托管的应用程序均可作为WCF服务的宿主,比如Console应用、Windows Forms...除了包含WCF服务的一些基本信息,比如服务的名称、命名空间和CLR类型等,ServiceDescription还包含服务所有终结点和服务行为的描述。...客户端行为体现的是WCF如何进行服务调用的方式,而服务端行为则体现了WCF的请求分发方式。...不同的是,IEndpointBehavior的所有方法的作用域仅限于当前终结点,并且IEndpointBehavior既可以作用于服务端,也可以用于客户端。...IContractBehavior具有与IEndpointBehavior一样的方法成员,但是契约行为作用于实现了该服务契约的所有服务(服务端行为),基于使用该服务契约进行服务调用的服务代理(客户端行为

    1K60

    WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)

    MetadataExporter定义了3个与元数据导出相关的方法,其中ExportContract仅仅导出基于某个服务契约相关的元数据,ExportEndpoint则导出某个终结点相关的所有元数据。...这两个方法并不直接返回用于承载元数据信息的MetadataSet对象,而是将导出的元数据暂存于元数据转换的上下文中,最终通过GetGeneratedMetadata方法从该元数据转换上下文中将导出的元数据提取出来...正是因为WSDL是目前描述Web服务做好的语言,建立WCF终结点与WSDL元素之间的匹配关系,以及基于该匹配关系的元数据导入和导出的实现,是WCF元数据框架体系的一个最为重要的目标。...除了重写定义在MetadataExporter三个抽象方法之外,还定义了一个ExportEndpoints方法帮助我们将一个包含多个终结点的服务作为一个整体导出,因为一个WSDL本身就是对一个完整的Web...服务的描述。

    77360

    WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)

    一、WSDL导出扩展(WSDL Export Extension) 终结点的绑定本质上就是相关的绑定元素(BindingElement)的有序组合(关于绑定的深入剖析,可以参考《WCF技术剖析(卷1)》...此外,WSDL导出扩展并不限于被相应的绑定元素用于添加Binding相关的元数据,我们也可以采用终结点行为、契约行为和操作行为(服务行为不可以用于WSDL导出扩展)作为WSDL导出扩展实现在最终生成的WSDL...方法或者ExportEndpoint方法,最终实现了对将定制的元数据写入最终的WSDL的目的。...二、策略导出扩展(Policy Export Extension) 在《WCF技术剖析(卷1)》的第3章对绑定的介绍中,我们说绝大部分WS规范最终都通过绑定实现,或者说,WCF通过定义相应的绑定元素对某个...在WCF元数据结构体系中,通过策略导出扩展实现对WS-Policy策略断言的导出。

    60660

    控制并发访问的三道屏障: WCF限流(Throttling)体系探秘

    一方面,我们期望WCF服务端能够处理尽可能多的并发请求,但是资源的有限性决定了并发量有一个最大值。...所以,我们需要在WCF的消息接收系统和消息处理系统之间设置一道道屏障,将流入消息处理系统的请求控制到一个最佳的范围,以实现对现有资源的有效利用,从而达到确保服务的可用性和提高整体吞吐量的目的。...需要注意的是,所有的设置必须在开启ServiceHost(调用Open方法)之前完成方能生效。...对于系统定义的服务行为来说,WCF均会为其定义相应的配置元素。同理,如果我们希望通过配置的方式应用自定义的服务行为,我们也需要定义相应的配置元素。...,从而指导WCF的限流体系按照你设定的值对并发的服务调用请求进行限流控制。

    59480

    控制并发访问的三道屏障: WCF限流(Throttling)体系探秘

    通过《上篇》介绍,我们知道了如何通过编程和配置的方式设置相应的最大并发量,从而指导WCF的限流体系按照你设定的值对并发的服务调用请求进行限流控制。那么,在WCF框架体系内部,整个过程是如何实现的呢?...关于信道分发器在整个WCF服务端框架体系中所处的位置,由于在《WCF技术剖析(卷1)》的第2章和第7章均有过详细的介绍,在这里我只作一些概括性的介绍。...在服务寄宿的时候,我们基于服务类型创建相应的ServiceHost对象,并为之添加一到多个终结点。...ServiceThrottle的内部,并没有通过公共方法的形式暴露出来(WCF甚至为ServiceThrottle定义了内部构造函数,我们不同直接通过new操作符创建ServiceThrottle对象)...ServiceThrottlingBehavior对信道并发器ServiceThrottle的设置实现在ApplyDispatchBehavior方法中,大概得逻辑如下面的伪代码所示: 1: public

    84760

    提高WCF服务并发能力的简单处理办法

    步骤: 1.把同样的WCF服务,在多个端口上"启动"(即同时运行多个wcf的实例,但每个实例都监听不同的端口) 2.用svcutil.exe生成的代理类,里面有N多构造函数的重载版本,观察一下类似下面的这个版本...,我们在web.config中的wcf配置节,做如下处理:             服务端的实例,配置多个name的endpoint节点 3.修改客户端的调用代码 把原来类似这样的代码: using (AstroServiceClient _client = new AstroServiceClient...(AstroServiceClient _client = new AstroServiceClient(new Random().Next(1, 4).ToString())) 即客户端随机从多个wcf...服务端的host中挑一个,生成代码类实例 大功告成,说白了就是把一个wcf的host分身成了3个,并且客户端随机调用3者之一

    96290

    Linux服务器离线安装Mysql等软件的最佳方法

    由于特殊的专用网络环境和安全策略等方面的原因,服务器往往无法访问互联网,这时我们还需要在服务器上安装软件,比如mysql、httpd。 那么如何选择安装方式最合适呢?...接下来我就介绍一下我们离线安装软件mysql的方法,以及总结的解决方案。...2、下载源码进行编译 采用这种方式的话,源码在服务器上编译时,一是可能比较耗时,二是也经常会报错,比如gcc的版本不匹配等,离线环境下对编译环境进行升级和调整也会是件麻烦事。...5、创建镜像仓库离线安装软件 基于方案四的基础上,将通过yum下载下来的rpm包做成一个仓库,将仓库copy离线服务器上,配置源为这个仓库,直接yum install命令就装上了。...此方法更适合局域网内不同机器多次安装软件,由于我们的需求只是在一台机器上装上mysql即可,所以采用的方案2。

    1.9K00
    领券