WCF如何更改请求中的前缀

问题描述:

在我的WCF项目中,我有一个函数“添加新策略”,它带有两个参数。在这个函数的请求中,用于这两个参数的前缀是“cch”。我如何将这两个参数的前缀更改为“tem”。WCF如何更改请求中的前缀

这是请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:tem="http://tempuri.org/" 
xmlns:cch="http://schemas.datacontract.org/2004/07/CCHVisitorsInsuranceWS.NS.NewPo 
    licy"> 
     <soapenv:Header/> 
     <soapenv:Body> 
      <tem:AddNewPolicy> 
      <!--Optional:--> 
      <tem:PolicyEntity> 
       <!--Optional:--> 
       <cch:PolicyNumber>?</cch:PolicyNumber> 
       <!--Optional:--> 
       <cch:eNumber>?</cch:eNumber> 
      </tem:PolicyEntity> 
      </tem:AddNewPolicy> 
     </soapenv:Body> 
    </soapenv:Envelope> 

<xs:element name="AddNewPolicy"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element xmlns:q3="schemas.datacontract.org/2004/07/…; minOccurs="0" name="PolicyEntity" nillable="true" type="q3:PolicyEntity"/>   
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 


    <wsdl:definitions xmlns:wsdl="schemas.xmlsoap.org/wsdl/"; 
    xmlns:wsap="schemas.xmlsoap.org/ws/2004/08/addressing/policy‌​"; 
    xmlns:wsa10="w3.org/2005/08/addressing"; xmlns:tns="tempuri.org/"; 
    xmlns:msc="schemas.microsoft.com/ws/2005/12/wsdl/contract"; 
    xmlns:soapenc="schemas.xmlsoap.org/soap/encoding/"; 
    xmlns:wsx="schemas.xmlsoap.org/ws/2004/09/mex"; 
    xmlns:soap="schemas.xmlsoap.org/wsdl/soap/"; 
    xmlns:wsam="w3.org/2007/05/addressing/metadata"; 
    xmlns:wsa="schemas.xmlsoap.org/ws/2004/08/addressing"; 
    xmlns:wsp="schemas.xmlsoap.org/ws/2004/09/policy"; 
    xmlns:wsaw="w3.org/2006/05/addressing/wsdl"; 
    xmlns:soap12="schemas.xmlsoap.org/wsdl/soap12/"; 
    xmlns:wsu="docs.oasis-open.org/wss/2004/01/…"; 
    xmlns:xsd="w3.org/2001/XMLSchema"; 
    name="CCHVI" 
    targetNamespace="tempuri.org/">...</wsdl:definitions> 
+0

你为什么要改变? – Rao

+0

因为请求的表单是这样的: ? tem:PolicyNumber> ? tem:eNumber> – MHH

+0

您能显示服务接口定义吗? – spodger

你的问题是,你的元素AddNewPolicyPolicyEntity没有任何名称空间中定义;这就是为什么他们被分配到默认的Microsoft WCF命名空间http://tempuri.org/

你需要将它们定义为相同的命名空间的一部分作为PolicyEntity,即你的http://schemas.datacontract.org/2004/07/CCHVisitorsInsuranceWS.NS.NewPolicy 命名空间。

就我个人而言,无论何时我在生成的WSDL或XSD中看到http://tempuri.org/,都会对我说我的命名空间有问题。一旦我彻底摆脱它,它可能是好的。