【1】MSMQ基本概念:

简要回顾一下MSMQ的基本概念,详细的你们可以参考, name,DateTime.Now);
            
        }
    }

(2)宿主:

    我的开发环境为XP专业版,工作组模式。这里有个问题要注意,就是安全。MSMQ默认的安全模式是需要证书支持。我们必须在宿主配置文件里给配置为 none,简化操作,因为证书需要MSMQ域管理器。MSMQ传输安全需要Windows安全,这个又需要AD活动目录支持,工作组模式下不支持,因此这 里我们都设置为none。代码如下:

 

<services>
      
<service behaviorConfiguration="WCFService.WCFServiceBehavior"
        name
="WCFService.WCFMSMQService">
        
<endpoint  
          address
="net.msmq://localhost/Private/FrankWCFMSMQ" 
          binding
="netMsmqBinding"         
          contract
="WCFService.IWCFMSMQService" bindingConfiguration="msmq" >
        
</endpoint>
       
        
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        
<host>
          
<baseAddresses>
            
<add baseAddress="http://localhost:8001/"/>
          
</baseAddresses>
        
</host>
      
</service>
    
</services>
    
<behaviors>
      
<serviceBehaviors>
        
<behavior name="WCFService.WCFServiceBehavior">
          
<serviceMetadata httpGetEnabled="true" />
          
<serviceDebug includeExceptionDetailInFaults="false" />
        
</behavior>
      
      
</serviceBehaviors>
    
</behaviors>
    
<bindings>
      
<netMsmqBinding>
        
<binding name="msmq" durable="false" exactlyOnce="false">
          
<security mode="None">
            
<transport msmqProtectionLevel="None"/>
            
<message clientCredentialType="None"/>
          
</security>
        
</binding>
      
</netMsmqBinding>
    
</bindings>

(3)客户端:

    运行客户端,添加服务引用,这里客户端的配置文件要做修改,安全模式也修改和宿主对应,设置为none。客户端测试方案是每个2秒调用一次服务请求。我们 这里在宿主端打印了时间。客户端发送消息完毕以后,宿主暂时不启动。等待一段时间。在启动宿主,观察宿主打印的消息。代码如下:

 

            //HTTP NetMsmqBinding_IWCFMSMQService
            WCFMSMQServiceClient wcfServiceProxy = new WCFMSMQServiceClient("NetMsmqBinding_IWCFMSMQService");
            
//通过代理调用SayHello服务,这里及时服务调用服务失败,消息会发送到队列里进行缓存。
            Console.WriteLine("WCF First Call at:{0}",DateTime.Now);
            wcfServiceProxy.SayHelloMSMQ(
"Frank");
            Thread.Sleep(
2000);//客户端休眠两秒,继续下一次调用
            Console.WriteLine("WCF Second Call at:{0}", DateTime.Now);
            wcfServiceProxy.SayHelloMSMQ(
"Frank Xu");
            Thread.Sleep(
2000);//客户端休眠两秒,继续下一次调用
            Console.WriteLine("WCF Last Call at:{0}", DateTime.Now);
            wcfServiceProxy.SayHelloMSMQ(
"Frank Xu Lei");

(4)运行结果:

   首先是客户端发送到的消息,我们可以再计算机-管理-服务-专用队列里查看到,如图:WCF服务离线操作与消息队列MSMQ(转)

    以前的服务要求我们必须启动宿主,不然会出现连接错误。这里为了测试,停留约4分钟后,我们启动宿主。观察宿主打印的消息:

WCF服务离线操作与消息队列MSMQ(转)

    宿主在联机以后响应了客户端的调用操作。

【总结】

     本节文章主要讲解的是WCF 如何使用MSMQ开发离线服务操作。这里除了回顾了MSMQ的基本概念,还介绍了WCF服务使用MSMQ的通信框架的优势和特点。最后给出了基于WCF 消息队列的离线服务调用实现的过程。

    WCF 对MSMQ消息队列的支持和扩展,大大提高了WCF服务调用的伸缩性和灵活性。本文由于开发环境的关系,没有给出公共队列的开发实现过程。另外在WCF 消息队列开发过程中,大家要做注意。

(1)在服务宿主端启动宿主,要做队列存在的判断,以免出现读取错误。

(2)队列服务涉及到安全的问题,认证和消息加密,签名,需要证书的配置。条件限制这里就没有给出具体的实现过程。

(3)WCF队列服务的另外一个重要概念就是对离线事务的支持。这一特性会在后续文章里给出。

(4)运行环境:Xp pro,.net 3.0以上,vs2008,至少安装MSMQ队列的私有队列组件服务。

相关文章:

  • 2021-07-08
  • 2021-08-09
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2021-08-16
猜你喜欢
  • 2021-05-24
  • 2021-11-14
  • 2021-06-03
  • 2021-10-28
  • 2021-07-03
  • 2021-07-21
相关资源
相似解决方案