也许我在搅拌东西,如果是这样的话,请让我知道。是否有可能使用MSMQ和WCF服务在同一主机中不使用MSMQ的WCF服务?
我想通过WCF提供一组关于消息的服务(这是一个例子)。在这个集合中,我将有一个“sendMessage”服务和一个“receiveMessage”服务。
对于的sendMessage,我想用MSMQ,因此用户可以将消息发送给其他用户100.000,这将在后台进行处理。
对于receiveMessage,我不想使用MSMQ,因为我希望用户在发出请求并获得响应时得到响应(MSMQ,在本例中为单向)。
我使用这个代码,开始我的主机在一个应用实例
static void Main(string[] args)
{
using (ServiceHost host =
new ServiceHost(typeof(Service), new Uri[] {
new Uri("net.msmq://localhost/private/loadqueue"),
new Uri("http://localhost:8383/") }))
{
host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true });
NetMsmqBinding binding = new NetMsmqBinding();
binding.Security.Transport.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
binding.Security.Transport.MsmqProtectionLevel = System.Net.Security.ProtectionLevel.None;
binding.ExactlyOnce = false;
host.AddServiceEndpoint(
typeof(IContract),
binding,
string.Empty);
host.AddServiceEndpoint(
typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");
host.Open();
Console.WriteLine("service running");
Console.ReadLine();
}
}
合同看起来像这样
[ServiceContract(SessionMode=SessionMode.Allowed)]
[DeliveryRequirements(QueuedDeliveryRequirements = QueuedDeliveryRequirementsMode.Allowed)]
public interface IContract
{
[OperationContract(IsOneWay = true)]
void SendData(string msg);
}
当客户端调用送出数据服务,该消息被发送到队列,之后它被服务使用。
我想创建其直接从客户端(在中间没有队列)接收消息的第二服务。
客户端将仅有一个Web引用,并且如果他称之为service.SendData()的消息被发送到队列,并且如果客户端调用service.NetMethod()中的服务直接接收该消息。这种方式对于客户端开发者来说是透明的,如果服务使用队列或者不使用队列,那么我将能够将服务分组为关于它们的功能而不是机制。这是可能的吗?
感谢, 奥斯卡
+1但是只有一个服务契约(接口) - 他想要定义两个*端点*(每个都有不同的传输),它们都有相同的契约。 –
我认为问题是他无法做到这一点,因为双向合同要求。 –
我只看到一个操作,这是一种方法。 –