سؤال

وأنا اتلقى خطأ عند محاولة استخدام عميل WCF اختبار مع خدمة WCF بلدي. هنا هو رمز الخدمة:

[ServiceContract]
public interface IEmployeeService
{
    [OperationContract(Name = "GetEmployee")]
    [WebGet(RequestFormat = WebMessageFormat.Xml,
        UriTemplate = "/Employees/{employeeNumber}")]
    Employee GetEmployee(string employeeNumber);
}

public Employee GetEmployee(string employeeNumber)
{
    var employeeNumberValue = Convert.ToInt32(employeeNumber);
    var employee = DataProvider.GetEmployee(employeeNumberValue);
    return employee;
}

<system.serviceModel>
    <services>
        <service name="Employees.Services.EmployeeService"
                 behaviorConfiguration="metaBehavior">
            <endpoint address=""
                      behaviorConfiguration="webHttp"
                      binding="webHttpBinding"
                      contract="Employees.Services.IEmployeeService">
            </endpoint>
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange">
            </endpoint>
        </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior name="webHttp">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="metaBehavior">
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

وأنا قادرة على الاتصال بالخدمة باستخدام عميل WCF اختبار، ولكن عندما أحاول أن استدعاء GetEmployee (employeeNumber) أحصل على الخطأ التالي:

فشل استدعاء الخدمة. الأسباب المحتملة: الخدمة حاليا أو التي يصعب الوصول إليها. تكوين العميل لا يتطابق مع وكيل. البروكسي الحالي غير صالح. الرجوع إلى تتبع المكدس لمزيد من التفاصيل. يمكنك محاولة لاستعادة قبل بدء وكيل جديد، واستعادة الافتراضي التكوين، أو تحديث الخدمة.

وكنت قادرا على الاتصال بنجاح هذه الخدمة عن طريق إرسال طلب من المتصفح.

وأي فكرة لماذا لا يمكنني استخدام اختبار العميل WCF؟

هل كانت مفيدة؟

المحلول

يرجى تجاهل جوابي السابقة. أنا لا أعتقد أن المشكلة هي في التكوين من جانب العميل.

WCF اختبار العميل وWebHttpBinding .

<اقتباس فقرة>   

وهذا هو وجود قيود على شبكة الإنترنت   نموذج البرمجة نفسها. على عكس SOAP   النهاية (أي تلك التي   BasicHttpBinding، WSHttpBinding، الخ)   التي لديها وسيلة لفضح الفوقية   حول نفسها (WSDL أو مكس) مع   معلومات حول كافة العمليات /   المعلمات في نقطة النهاية، هناك   حاليا لا يوجد طريقة قياسية لفضح   الفوقية لنقطة النهاية غير SOAP - و   هذا هو بالضبط ما   النهاية القائم على webHttpBinding هي. في   باختصار، لن يكون اختبار العميل WCF   من المفيد بالنسبة لنهايات على شبكة الإنترنت. إذا   بعض المعايير لتمثيل   النهاية على غرار شبكة الإنترنت تبرز عندما WCF   سفن نسخته القادمة، سنقوم على الأرجح   تحديث العميل اختبار لتقديم الدعم لها،   ولكن في الوقت الراهن لا يوجد أي على نطاق واسع   اعتمد.

نصائح أخرى

وأعتقد أن التكوين الخاص بك غير صحيح، يجب عليك إضافة الأمن عقدة الوضع = "لا شيء" والسمة bindingConfiguration = "NoneSecurity"

وتغيير كما بلدي التكوين، حاول مرة أخرى:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="NoneSecurity"
          maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
          <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
          <security mode="None"/>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Elong.GlobalHotel.Host.IHotelAPIBehavior"
        name="Elong.GlobalHotel.Host.IHotelAPI">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="NoneSecurity" contract="Elong.GlobalHotel.Host.IIHotelAPI">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Elong.GlobalHotel.Host.IHotelAPIBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  I had a similar problem, the solution was in a minor error in the message alias ... that very generic message ... in our case was assigned a Boolean false if the right is true.
  This value was in the MDM application that was running on websphere.

والمسار في حالتي:

   /opt/infamdm/hub/server/resources/cmxserver.properties
   /opt/infamdm/hub/cleanse/resources/cmxcleanse.properties
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top