WCF结合MSMQ在IISWeb项目应用

文章前奏

        1.MSMQ已经安装成功,并且创建了myqueu

         2.vs以管理员身份运行

正文:

        主要分为三个部分,第一部分:服务于契约定义与配置,第二部分:IIS宿主部分编写与配置,第三部分web网站使用WCF接口,和MSMQ

  一.第一部分先写服务于契约,也就是接口。

    接口定义

using System.ServiceModel;
namespace WCFLibrary.StateCheck
{
    [ServiceContract]
    public interface IBaseInfo
    {
        [OperationContract(IsOneWay = true)]
        void GetInfo(string code);
    }
}

    接口实现:

 public class BaseInfo : IBaseInfo
    {
        public void GetInfo(string code)
        {
            Console.WriteLine("接收到了消息:" + code);
            File.WriteAllText(@"D:\test.txt", code, Encoding.Default);
            //执行调用hong命令

        }

    }

配置文件:

 <system.serviceModel>
    <services>
      <service name="WCFLibrary.StateCheck.BaseInfo">
        <host>

          <baseAddresses>

        这个路径:可以通过WCF客户端来测试是否成功!

            <add baseAddress="http://localhost:8733/Design_Time_Addresses/WCFLibrary/Service/"/>

          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
        <endpoint address="" binding="wsHttpBinding" contract="WCFLibrary.StateCheck.IBaseInfo">
          <!--
              部署时,应删除或替换下列标识元素,以反映
             用来运行所部署服务的标识。删除之后,WCF 将
              自动推断相应标识。
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
        <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
         
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

二.第二部分:IIS宿主

    IIS宿主的作用主要就是:使刚才写的接口可以寄宿在IIS进程上,这样子的话,WCF接口就一直处于侦听状态。

    比如我在localhost/index.aspx中启动侦听

    我的index.cs编码

         ServiceHost host;
        protected void Page_Load(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(BaseInfo));
            //打开宿主
            host.Open();
            this.lbContent.Text = "WCF中的HTTP监听已启动....";
        }

         配置文件:主要是为了将消息队列和接口通信

                <system.serviceModel>
    <services>

      <service name="WCFLibrary.StateCheck.BaseInfo">

        <endpoint address="net.msmq://211.81.251.80/private/myqueue" bindingConfiguration="NoneSecurity" binding="netMsmqBinding" contract="WCFLibrary.StateCheck.IBaseInfo">

        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehaviour">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>

      <netMsmqBinding>

        <binding name="NoneSecurity" exactlyOnce="false" queueTransferProtocol="Native">

          <security mode="None" />

        </binding>

      </netMsmqBinding>

    </bindings>

  </system.serviceModel>

三。web项目中通过MSMQ与接口通信

     protected void btn_Click(object sender, EventArgs e)
        {
            try
            { using (ChannelFactory<IBaseInfo> channelFactory = new ChannelFactory<IBaseInfo>("msmqService"))

                {
                    IBaseInfo proxyeService = channelFactory.CreateChannel();

                    for (int i = 0; i < 1000; i++) {

                        调用服务端接口

                        proxyeService.GetInfo("Hello World"+i);
                        Console.WriteLine("调用服务端"+i);
                    }
                    Response.Write("调用服务成功");
                }
            }
            catch (Exception)
            {

            }          

}

}

配置文件:

        <system.serviceModel>
     <client>
        <endpoint address="net.msmq://211.81.251.80/private/myqueue"
           binding="netMsmqBinding" bindingConfiguration="NoneSecurity"
           contract="WCFLibrary.StateCheck.IBaseInfo" name="msmqService" />
        
     </client>

    <bindings>
      <netMsmqBinding>
        <binding name="NoneSecurity" exactlyOnce="false" queueTransferProtocol="Native">
          <security mode="None" />
        </binding>
      </netMsmqBinding>
    </bindings>
  </system.serviceModel>

        

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值