也許我在攪拌東西,如果是這樣的話,請讓我知道。是否有可能使用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但是隻有一個服務契約(接口) - 他想要定義兩個*端點*(每個都有不同的傳輸),它們都有相同的契約。 –
我認爲問題是他無法做到這一點,因爲雙向合同要求。 –
我只看到一個操作,這是一種方法。 –