سؤال

حسنًا ، هذا يقودني إلى الجنون. لقد كنت أحاول إنشاء رمز تنفيذ الخدمة من WSDL محدد مسبقًا وهو يعيد باستمرار رسالة على عقد/واجهة الخدمة:

// CODEGEN: Generating message contract since the wrapper name (GetMetricsRequest) of message GetMetricsRequest does not match the default value (GetMetrics)

    [System.ServiceModel.OperationContractAttribute(Action="GetMetrics", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
    GetMetricsResponse GetMetrics(GetMetricsRequest request);

لقد حاولت القيام بذلك باستخدام معالج رمز الخدمة SVCUTIL.exe و WSCF ، وكلاهما يعيد نفس النتيجة.

فيما يلي WSDL الذي أستخدمه. لقد أضفت الأنواع هنا ، لقد انقسمت لهم إلى XSD منفصل ، فقط لم أرغب في نشر كليهما. باستخدام WSDL (مع جميع الأنواع المضمنة) يولد أيضًا نفس المشكلات.

لقد راجعت منشور المدونة هذا (http://pzf.fremantle.org/2007/05/handlign.html) ، الأمر يتعلق بكل ما يمكن أن أجده فيما يتعلق بهذه المشكلة. أعتقد أنني فعلت كل ما تقوله ، لكنني ما زلت أواجه مشاكل.

أصادف أحدكم هذا من قبل؟ إنه أمر مزعج للغاية ، ربما أفتقد شيئًا واضحًا. أي مساعدة سوف تكون محل تقدير كبير.

<wsdl:definitions
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:tns="urn:MyNameSpace:V1_0"        


 targetNamespace="urn:MyNameSpace:V1_0">


 <wsdl:types>
  <xs:schema targetNamespace="urn:MyNameSpace:V1_0">
   <xs:element name="GetMetricsRequest">
    <xs:complexType>
     <xs:sequence>
      <xs:element  nillable="true" name="GetMetricRequestElement" type="tns:GetMetricRequestType"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>   
   <xs:element name="GetMetricResponse">
    <xs:complexType>
     <xs:sequence>
      <xs:element  nillable="true" maxOccurs="unbounded" name="GetMetricResponseElement" type="tns:GetMetricResponseType"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>

   <xs:complexType name="GetMetricResponseType">
    <xs:sequence>
     <xs:element  nillable="true" name="Metrics" type="tns:MetricsType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="GetMetricRequestType">
    <xs:sequence>
     <xs:element  minOccurs="1" maxOccurs="1" name="MetricCriteria" nillable="true" type="tns:MetricCriteriaType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:simpleType name="AvailableMetricType"> 
    <xs:restriction base="xs:string">
     <xs:enumeration value="MetricType1"/>
     <xs:enumeration value="MetricType2"/>
     <xs:enumeration value="MetricType3"/>
     <xs:enumeration value="MetricType4"/>
    </xs:restriction>
   </xs:simpleType>

   <xs:complexType name="AvailableMetricsType">
    <xs:sequence>
     <xs:element minOccurs="1" nillable="true" maxOccurs="unbounded" name="MetricType" type="tns:AvailableMetricType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:simpleType name="MetricDimensionType">
    <xs:restriction base="xs:string">
     <xs:enumeration value="Store"/>
     <xs:enumeration value="Workgroup"/>
     <xs:enumeration value="BusinessDate"/>
     <xs:enumeration value="JobClass"/>
    </xs:restriction>
   </xs:simpleType>

   <xs:complexType name="MetricDimensionsType">
    <xs:sequence>
     <xs:element minOccurs="1" maxOccurs="unbounded"  nillable="true" name="MetricDimension" type="tns:MetricDimensionType"/>
    </xs:sequence>
   </xs:complexType>    

   <xs:complexType name="MetricCriteriaType">
    <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="1" name="storeNumber" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="workgroup" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="jobClass" nillable="true" type="xs:string"/>
     <xs:element maxOccurs="1" nillable="true" name="dateStart" type="xs:dateTime"/>
     <xs:element maxOccurs="1" nillable="true" name="dateEnd" type="xs:dateTime"/>
     <xs:element maxOccurs="1" name="dimensions" nillable="true" type="tns:MetricDimensionsType"/>
     <xs:element maxOccurs="1" name="metricTypes" nillable="true" type="tns:AvailableMetricsType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="MetricType">
    <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="1" name="businessDate"  nillable="true" type="xs:dateTime"/>
     <xs:element minOccurs="0" maxOccurs="1" name="store" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="workgroup" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="jobClass" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="metricValue"  nillable="true" type="xs:decimal"/>     
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="MetricsType">
    <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="unbounded" name="Metric" nillable="true" type="tns:MetricType"/>
    </xs:sequence>
   </xs:complexType>

  </xs:schema>
 </wsdl:types>

 <wsdl:message name="GetMetricsRequestMessage">
  <wsdl:part name="parameters" element="tns:GetMetricsRequest"/>
 </wsdl:message>

 <wsdl:message name="GetMetricsResponseMessage">
  <wsdl:part name="parameters" element="tns:GetMetricResponse"/>
 </wsdl:message>

 <wsdl:portType name="Metric">
  <wsdl:operation name="GetMetrics">
   <wsdl:input message="tns:GetMetricsRequestMessage"/>
   <wsdl:output message="tns:GetMetricsResponseMessage"/>
  </wsdl:operation>
 </wsdl:portType>

 <wsdl:binding name="MetricService" type="tns:Metric">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  <wsdl:operation name="GetMetrics">
   <soap:operation soapAction="GetMetrics" style="document"/>
   <wsdl:input>
    <soap:body use="literal"/>    
   </wsdl:input>
   <wsdl:output>
    <soap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>

 <wsdl:service name="Metric">
  <wsdl:port name="GetMetrics" binding="tns:MetricService">
   <soap:address location="http://myurl/myproj/1.0/MyService.svc"/>
  </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

شكرا marc_s ،

حسنًا ، يبدو أن هذا يعمل. لقد كان مجرد مفقود في نوع الاستجابة. دوه!

الآن يبدو أن رمز الخدمة يولد بشكل جيد ، لكن عندما أتصفح خدمتي ، لا يوجد عقد بيانات/XSD ولا توجد عمليات على WSDL.

يبدو فقط:

<wsdl:definitions name="MetricServiceImplementation" targetNamespace="http://tempuri.org/">
  <wsdl:import namespace="urn:GiantEagle:Services:Systems::Metric:V1_0" location="http://localhost:2814/Services/MetricService.svc?wsdl=wsdl0"/>
  <wsdl:types/>
    <wsdl:binding name="BasicHttpBinding_MetricService" type="i0:MetricService">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
  </wsdl:binding>
  <wsdl:service name="MetricServiceImplementation">
    <wsdl:port name="BasicHttpBinding_MetricService" binding="tns:BasicHttpBinding_MetricService">
      <soap:address location="http://localhost:2814/Services/MetricService.svc"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

أتوقع أن تبدو مثل WSDL التي أنشأتها الرمز من ، لا؟

لا يوجد حل صحيح

نصائح أخرى

جرب هذا - يجب أن يكون طلبك ورسائل الاستجابة في WSDL

  • نفس اسم عمليتك للطلب ("getMetrics")
  • اسم العملية + "الاستجابة" لاستجابتك ("getMetricsPonse")

لذا حاول تغيير WSDL إلى:

<wsdl:message name="GetMetrics">
   <wsdl:part name="parameters" element="tns:GetMetricsRequest"/>
</wsdl:message>

<wsdl:message name="GetMetricsResponse">
   <wsdl:part name="parameters" element="tns:GetMetricResponse"/>
</wsdl:message>

وأيضًا تحديث porttype الخاص بك:

<wsdl:portType name="Metric">
   <wsdl:operation name="GetMetrics">
      <wsdl:input message="tns:GetMetrics"/>
      <wsdl:output message="tns:GetMetricsResponse"/>
   </wsdl:operation>
</wsdl:portType>

هل هذا يساعد على الإطلاق؟

إذا لم يكن الأمر كذلك: حاول تحديثك الفعلي <xs:element> في XSD الخاص بك لمطابقة نفس النمط - يجب أن يكون نوع الطلب هو نفسه العملية التي تتصل بها ، يجب أن يكون كائن الاستجابة (MethodName) استجابة.

مسح ال "*" في ال ReplyAction("*") التابع OperationContract

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top