WCF的WAS寄宿

这是一个测试的项目,最近突然想尝试一下把现有的WCF的wsHttpBinding换成netTcpBinding看看效率是否有点儿提高,各类网文都告诉我tcp的效率要好很多,也幸好有WAS寄宿,让我不用把现有的IIS的WCF服务迁移到Windows服务上去,记录一下过程中遇到的各类问题,仅供参考!

1.首先要把服务器环境搭好,我的服务器是Windows Server 2008 R2,控制面板->程序和功能->打开或关闭Windows功能,添加功能,把图示里的都勾上就可以了

2.上一步基本的教程里面都有,我自己本机的系统是Windows 10,开启这个功能有一点不一样,下图所示,重点看框出的部分,其他不重要请忽略!

3.其实在服务器上做这个.net 3.5的功能新增的时候很危险,如果正式在线的服务器还是慎重进行此操作,这个功能新增会影响线上的IIS使用应用程序池为.net 4.0的站点会找不到默认引用的.net 4.0一些程序集,导致站点无法正常运行,需要重新注册一下.NET 4.0,以下是重新注册IIS命令

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

4.WAS服务开启后,在IIS的绑定设置里面就出现了下图所示除了http协议的其他协议选项

5.这里选择net.tcp协议,绑定信息里面填写808:*,为啥是808呢,这应该算是一个默认的端口,可以从本机的防火墙入站规则里看到,这是Windows Communication Foundation Net.Tcp 侦听适配器(tcp-in)特定端口,扯远了继续看配置。

6.另外就是IIS的高级配置中启用的协议中添加net.tcp

7.到这里基本可以把WCF服务部署到相应的IIS站点里了,一下是测试代码

IUserService.cs

using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WASTest
{
    [ServiceContract]
    public interface IUserService
    {

        [OperationContract]
        string GetData(int value);

        // TODO: 在此添加您的服务操作
    }
}

UserService.svc

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WASTest
{
    public class UserService : IUserService
    {
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

    }
}

web.config

  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcpBindConfig">
          <security mode="None">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"  />
            <message clientCredentialType="Windows"  />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>

    <services>
      <service name="WASTest.UserService" behaviorConfiguration="MyBehavior">

        <endpoint address="" binding="netTcpBinding"  bindingConfiguration="netTcpBindConfig" contract="WASTest.IUserService"></endpoint>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior" >
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

8.最后直接访问http://localhost:8002/UserService.svc,可以看到如下结果

9. 最后附上可能遇到的问题和解决办法

-------------------------------------------------------------------------------------------------------------

找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注册的基址方案是 [http]。

参考步骤6,如果是站点,站点高级设置添加net.tcp协议,如果是站点下的应用程序,对应的应用程序高级设置也需要添加!

-------------------------------------------------------------------------------------------------------------

如果你部署成功后结果,没有net.tcp的服务操作介绍,如下图所示

更改web.config的behavior设置,httpGetEnabled需要设置为false

 

时间: 2024-10-22 10:43:35

WCF的WAS寄宿的相关文章

创建WCF服务自我寄宿

WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用. 签名 前面介绍过了WCF常用的一种寄宿方式,IIS服务寄宿.这种寄宿方式是最为方便的方式,而且由于服务只需要IIS运行就能自动运行起来,因此广为使用. 创建这种方式IIS寄宿方式的,只需要在解决方案里面,添加WCF服务应用程序,就可以生成这种的服务模块了. 将WCF服

WCF绑定netTcpBinding寄宿到IIS

继续沿用上一篇随笔中WCF服务类库 Wettery.WcfContract.Services WCF绑定netTcpBinding寄宿到控制台应用程序 服务端 添加WCF服务应用程序 Wettery.WcfIISHost.Services,其中添加两个WCF服务,GameService.svc  PlayerService.svc,删掉契约接口和 .cs内嵌文件,只留下.svc文件 我们通过Autofac注入契约/服务的依赖关系,Nuget引用 Install-Package Autofac.W

通过代码的方式完成WCF服务的寄宿工作

使用纯代码的方式进行服务寄宿 服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境.通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以以纯代码的方式实现服务的寄宿工作. 新建立一个控制台应用程序,添加System.ServiceModel库文件的引用. 添加WCF服务接口:ISchool使用ServiceContract进行接口约束,OperationContract进行行为约束 1 using Sy

WCF 非http寄宿IIS

一:生成一个简单的wcf项目,以及IIS服务配置,发布项目 ,步骤 二:Web.config配置 <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> &

WCF绑定netTcpBinding寄宿到控制台应用程序

契约 新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService 代码如下: [ServiceContract] public interface IGameService { [OperationContract] Task<string> DoWork(string arg); } public class GameService : IGameService { public async Task<string> DoWork(s

WCF通过IIS寄宿服务

(1)为IIS应用建立物理位置,其实就是找个地方新建文件夹(例如:IISService),用于存放相关文件. (2) 建立IIS应用程序.控制面板->管理工具->打开IIS.在默认网站节点右击,选择添加应用程序.别名随便起,物理路径选择(1)步骤中建的文件夹.直接点击确定,测试设置忽略之. (3) 将.svc文件和web.config文件放到物理路径(IISService)中.在IISService文件夹下添加名为App_Code文件夹,存放相关的.cs文件. (4)右击在步骤(2)中新建的应

创建WCF服务寄宿到IIS

一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术. 由 .NET Framework 3.0 开始引入. WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web

[转]WCF的几种寄宿方式

转自:WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详细介绍并开发例子进行说明,以求大家对WCF寄宿的方式进行全面的认识和了解. 1. WCF服务的IIS服务寄宿 我在我前面几篇WCF开发框架的介绍文章中,介绍过了WCF常用的一种寄宿方式,IIS服务寄宿.这种寄宿方式是最为方便的方式,而且由于服务

WCF寄宿方式

WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详细介绍并开发例子进行说明,以求大家对WCF寄宿的方式进行全面的认识和了解. 1. WCF服务的IIS服务寄宿 我在我前面几篇WCF开发框架的介绍文章中,介绍过了WCF常用的一种寄宿方式,IIS服务寄宿.这种寄宿方式是最为方便的方式,而且由于服务只需要