wcf-消息队列
1.首先要确保已经安装消息队列msmq
2.Contract&Service
using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Text; using System.Threading.Tasks; namespace Server { [ServiceContract] public interface IPick { [OperationContract(IsOneWay=true)] void PickSome(string content); } }
namespace Server { public class Pick:IPick { public void PickSome(string content) { Console.WriteLine(DateTime.Now.ToString("yyyyMMddHHmmss")+content); } } }
3.ServiceHost
using Server; using System; using System.Collections.Generic; using System.Linq; using System.Messaging; using System.ServiceModel; using System.Text; using System.Threading.Tasks; namespace ServerHost { class Program { static void Main(string[] args) { if(!MessageQueue.Exists(@".\Private$\lizhch")) { MessageQueue.Create(@".\Private$\lizhch"); } using (ServiceHost serviceHost = new ServiceHost(typeof(Pick))) { serviceHost.Opened += serviceHost_Opened; try { serviceHost.Open(); Console.Read(); } catch (Exception ex) { serviceHost.Abort(); } finally { serviceHost.Close(); } } } static void serviceHost_Opened(object sender, EventArgs e) { Console.WriteLine("opened..."); } } }
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <system.serviceModel> <services> <service name="Server.Pick" behaviorConfiguration="MatedataBehavior"> <endpoint address="net.msmq://localhost/Private/lizhch" binding="netMsmqBinding" bindingConfiguration="msmq" contract="Server.IPick" ></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MatedataBehavior"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/pick" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <netMsmqBinding> <binding name="msmq" durable="false" exactlyOnce="false" deadLetterQueue="System" > <security mode="None"> <transport msmqProtectionLevel="None"/> <message clientCredentialType="None"/> </security> </binding> </netMsmqBinding> </bindings> </system.serviceModel> </configuration>
4.Client
添加引用
class Program { static void Main(string[] args) { using (ServiceReference1.PickClient client = new ServiceReference1.PickClient()) { client.PickSome("abc"); } } }