كيفية استخدام MSMQ في WCF؟
-
03-10-2019 - |
سؤال
يمكنني العمل مع العديد من روابط WCF ، باستثناء netMsmqBinding
. كل ما أحصل عليه هو:
CommunicationObjectFaultException: "لا يمكن استخدام كائن الاتصال ، system.ServicEmodel.Servicehost ، للاتصال لأنه في الحالة المعطلة."
في System.ServicEmodel.Channels.CommunicationObject.Close (TimePan Timeout)
جربته في Windows Server 2008 R2 مع تثبيت الميزات التالية
- قائمة انتظار الرسائل
- خدمات قائمة انتظار الرسائل
- خادم قائمة انتظار الرسائل
- مشغلات قائمة انتظار الرسائل
- دعم HTTP
- الدعم متعدد البث
- رسائل قائمة انتظار وكيل DCOM
حاولت أيضًا إضافة قائمة انتظار رسائل خاصة يدويًا في مدير الخادم لكنها لم تنجح.
أنا أستخدم خدمة Windows لاستضافة MSMQ الخاص بي. عقد الخدمة الخاص بي هو
namespace MyCompany.Services
{
[ServiceContract(Name = "ServiceName",
Namespace = "http://MyCompany/ServiceName")]
public interface IServiceName
{
[OperationContract(IsOneWay = true)]
void Insert(MyData[] data);
}
[DataContract]
public class MyData
{
[DataMember]
public DateTime DateTime { get; set; }
[DataMember]
public double Lat { get; set; }
[DataMember]
public double Lon { get; set; }
[DataMember]
public TimeSpan Timespan { get; set; }
[DataMember]
public Guid Id { get; set; }
[DataMember(IsRequired = false)]
public int? Category { get; set; }
}
}
ويحتوي app.config
<endpoint
address="net.msmq://localhost/private/ServiceName"
binding="netMsmqBinding"
contract="MyCompany.Services.IServiceName"
bindingConfiguration="tolerant"
behaviorConfiguration="tolerant"
/>
و
<netMsmqBinding>
<binding name="tolerant"
maxReceivedMessageSize="2147483647"
>
<readerQuotas maxArrayLength="2147483647" />
<security mode="None"/>
</binding>
</netMsmqBinding>
المحلول
أفضل نقطة انطلاق هي نشر مدونة توم هولاندر المكونة من ثلاثة أجزاء:
- MSMQ ، WCF و IIS: الحصول عليها تلعب لطيفة (الجزء 1)
- MSMQ ، WCF و IIS: الحصول عليها تلعب لطيفة (الجزء 2)
- MSMQ ، WCF و IIS: الحصول عليها تلعب لطيفة (الجزء 3)
وإلقاء نظرة جيدة على مستندات MSDN على قوائم الانتظار في WCF - الكثير من الأشياء هناك أيضًا!
إن الخطأ الذي تحصل عليه سيشير إلى بعض المشكلات في قناة الاتصال - حدث خطأ ما ، لقد تم "خطأ" القناة ، أي أصبحت غير صالحة للاستعمال. هناك الكثير من الأسباب التي قد تحدث ، من الصعب حقًا تشخيصها من بعيد مع أي معلومات بالكاد.
تحقق من الموارد ومعرفة ما إذا كان ذلك يساعدك على خطوة أو خطوة أخرى - إن لم يكن ، سيتعين علينا الحصول على مزيد من المعلومات منك!