3、Hosting
Configuration
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <netMsmqBinding> <binding name="msmqBinding"> <security> <transport msmqAuthenticationMode="None" msmqProtectionLevel="None" /> <message clientCredentialType="None" /> </security> </binding> </netMsmqBinding> </bindings> <services> <service name="Artech.QueuedService.Service. OrderProcessorService"> <endpoint address="net.msmq://localhost/private/orders" binding="netMsmqBinding" bindingConfiguration="msmqBinding" contract="Artech.QueuedService.Contract.IOrderProcessor" /> </service> </services> </system.serviceModel> </configuration>
|
在默认的情况下,netMsmqBinding 的msmqAuthenticationMode为WindowsDomain,由于基于WindowsDomain必须安装AD,利于在本机模拟,我把msmqAuthenticationMode改为None,相应的ProtectionLevel和clientCredentialType改为None。
Program:
using System; using System.Collections.Generic; using System.Text; using System.Messaging; using System.ServiceModel; using Artech.QueuedService.Service; namespace Artech.QueuedService.Hosting { class Program { static void Main(string[] args) { string path = @".\private$\orders"; if(!MessageQueue.Exists(path)) { MessageQueue.Create(path,true); } using (ServiceHost host = new ServiceHost(typeof(OrderProcessorService))) { host.Opened += delegate { Console.WriteLine("Service has begun to listen\n\n"); }; host.Open(); Console.Read(); } } } }
|
在Host Service之前,通过MessageQueue.Create创建一个Message Queue,第二个参数为表明Queue是否支持Transaction的indicator,这里支持Transaction。
4、Client
Configuration
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <netMsmqBinding> <binding name="msmqBinding"> <security> <transport msmqAuthenticationMode="None" msmqProtectionLevel="None" /> <message clientCredentialType="None" /> </security> </binding> </netMsmqBinding> </bindings> <client> <endpoint address="net.msmq://localhost/private/orders" binding="netMsmqBinding" bindingConfiguration="msmqBinding" contract="Artech.QueuedService.Contract.IOrderProcessor" name="defaultEndpoint" /> </client> </system.serviceModel> </configuration>
|