لا يمكن العثور على imetadataexchange في قائمة العقود التي تنفذها الخدمة
-
28-09-2019 - |
سؤال
لقد بحثت في الويب للحصول على حل هذا الخطأ ، لكن كل ما وجدته يشير إلى ما لدي هو الصحيح.
ربما يمكن لشخص ما إلقاء نظرة واكتشف خطأً واضحًا لا يمكنني رؤيته.
لدي خدمة Windows ، استضافة عقدين:
- iconfigurationservice
- IconFigurationAdminservice
ترث خدمة المسؤول من الخدمة القياسية حيث أريد أن ينفذ كلتا العقدين الأساليب الأساسية.
المشكلة هي أنه يمكنني استضافة الخدمات بشكل جيد ، حتى أحاول إضافة MEX.
ثم أحصل على الاستثناء التالي:
لا يمكن العثور على اسم العقد "imetadataexchange" في قائمة العقود التي تنفذها الخدمة "ConfigurationWcfService".
وهذا هو التكوين الخاص بي ، يتم تكوين كل شيء عن طريق التكوين ، لا يتم القيام بأي شيء من خلال التعليمات البرمجية.
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="tcpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<services>
<service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFService">
<endpoint address="ConfigurationService" binding="netTcpBinding"
bindingConfiguration="tcpBinding" name="tcpConfiguration" contract="BrightsideGroup.Repa.Configuration.IConfigurationWCFService" />
<endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://GD01316:9123/Repa" />
<add baseAddress="http://GD01316:8123/Repa" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFAdminService">
<endpoint address="ConfigurationAdminService" binding="netTcpBinding"
bindingConfiguration="tcpBinding" name="tcpConfigurationAdmin"
contract="BrightsideGroup.Repa.Configuration.IConfigurationAdminWCFService" />
<endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://GD01316:9124/Repa" />
<add baseAddress="http://GD01316:8124/Repa" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
المحلول
لديك الغلاف غير صحيح - تكوين WCF حساس للحالة
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
لاحظ أن "D" لم يتم رسملة IMetadataExchange
يمكنك التحقق من ضعف بناء الجملة على MSDN.
نصائح أخرى
أنا أستخدم nettcpbinding للجميع. في حالتي ، كنت أواجه نفس المشكلة وحلها عن طريق إضافة:
(أ) تصرف السلوك = "" إلى نقطة نهاية MEX
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
behaviourConfiguration="" />
(ب) تصرف السلوك = "mex" إلى تعريف الخدمة:
<services>
<service name="AcmeService" behaviourConfiguration="mex">
(ج) إدخال السلوك
<behaviors>
<serviceBehaviors>
<behaviour name="mex">
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
آمل أن الرابط التالي قد توفر لك المساعدة.
وحاول أيضًا إضافة ما يلي:
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>