码迷,mamicode.com
首页 > 其他好文 > 详细

WCF的WAS寄宿

时间:2015-10-21 12:23:44      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

这是一个测试的项目,最近突然想尝试一下把现有的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

 

 

WCF的WAS寄宿

标签:

原文地址:http://www.cnblogs.com/stealth7/p/4897317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!