.net Wcf作为soap:不同的问题取决于客户端

.net Wcf作为soap:不同的问题取决于客户端,.net,wcf,soap,.net,Wcf,Soap,出于兼容性原因,我正在开发一个简单的wcf服务,并尝试将其公开为Soap:客户机将是一个具有良好actionscript的flash应用程序 显然,我正在使用basicHttpBinding生成与soap兼容的WSDL 以下是我的配置(当然是匿名的敏感数据): :这会读取我的wsdl,查看参数列表,但调用时会发生“意外错误” 使用调用webservice:它读取wsdl,但根本看不到参数列表,调用失败 我的服务显然有问题。下面是WSDL,也许有人可以告诉我出了什么问题(再次匿名): 有人

出于兼容性原因,我正在开发一个简单的wcf服务,并尝试将其公开为Soap:客户机将是一个具有良好actionscript的flash应用程序

显然,我正在使用basicHttpBinding生成与soap兼容的WSDL

以下是我的配置(当然是匿名的敏感数据):


:这会读取我的wsdl,查看参数列表,但调用时会发生“意外错误”
  • 使用调用webservice:它读取wsdl,但根本看不到参数列表,调用失败
  • 我的服务显然有问题。下面是WSDL,也许有人可以告诉我出了什么问题(再次匿名):

    
    

    有人能给我们点启示吗?谢谢。

    此wsdl中确实没有直接的类型。它们是从其他位置导入的(例如
    http://www1.myproject.mydomain.com/?xsd=xsd0
    )在xsd:import声明中。解析器必须遵循这些导入并解析它们。我不知道validWSDL.com是否会这样做。我在自己的服务上尝试过,调用时出现的错误是:

    “在WSDL文档的元素中找不到匹配的“元素”定义”


    如果您在某些客户端遇到问题,您可以尝试直接用这些文件中定义的模式替换导入。看看这里是什么样子。因为我还没有经历过这种情况,我不能保证这就是原因,但是你可以用validwsdl.com试试,看看它是否有效。应该很容易测试。

    这个wsdl中确实没有直接的类型。它们是从其他位置导入的(例如
    http://www1.myproject.mydomain.com/?xsd=xsd0
    )在xsd:import声明中。解析器必须遵循这些导入并解析它们。我不知道validWSDL.com是否会这样做。我在自己的服务上尝试过,调用时出现的错误是:

    “在WSDL文档的元素中找不到匹配的“元素”定义”


    如果您在某些客户端遇到问题,您可以尝试直接用这些文件中定义的模式替换导入。看看这里是什么样子。因为我还没有经历过这种情况,我不能保证这就是原因,但是你可以用validwsdl.com试试,看看它是否有效。应该很容易测试。

    有些情况下,其他平台不理解导入属性,因此我们需要展平wsdl

    您可以在以下位置找到一些关于如何展平wsdl的信息


    您需要创建自己的服务主机工厂,如链接中所解释的那样,将wsdl展平。如果我没有错的话,这将是.NET4.5中的一个内置功能。这方面的信息可以在这里找到

    有些情况下,其他平台不理解导入属性,因此我们需要扁平化我们的wsdl

    您可以在以下位置找到一些关于如何展平wsdl的信息


    您需要创建自己的服务主机工厂,如链接中所解释的那样,将wsdl展平。如果我没有错的话,这将是.NET4.5中的一个内置功能。这方面的信息可以在这里找到

    我一直在调查,似乎这就是问题所在。我遇到了一些关于WCF互操作的“Wsdl扁平化”主题。我仍在试验,如果我成功了,我一定会发布我自己问题的解决方案。我一直在调查,似乎这就是问题所在。我遇到了一些关于WCF互操作的“Wsdl扁平化”主题。我还在试验,如果我成功了,我一定会发布一个解决我自己问题的方法。
    <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="soapBinding" />
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="BasicBehavior" name="MyCustomer.MyProject.WebService.MyService">
        <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
        <endpoint binding="basicHttpBinding" bindingConfiguration="soapBinding"
          name="Basic" bindingNamespace="http://myurl"
          contract="MyCustomer.MyProject.WebService.IMyService">
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://myurl" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BasicBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    
        <wsdl:definitions name="mycustomermyprojectService" targetNamespace="http://www1.myproject.mydomain.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://www1.myproject.mydomain.com" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
      <wsdl:types>
        <xsd:schema targetNamespace="http://www1.myproject.mydomain.com/Imports">
          <xsd:import schemaLocation="http://www1.myproject.mydomain.com/?xsd=xsd0" namespace="http://www1.myproject.mydomain.com"/>
          <xsd:import schemaLocation="http://www1.myproject.mydomain.com/?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
          <xsd:import schemaLocation="http://www1.myproject.mydomain.com/?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/mycustomer.myproject.WebService.Models"/>
        </xsd:schema>
      </wsdl:types>
      <wsdl:message name="ImycustomermyprojectService_ValidateForm_InputMessage">
        <wsdl:part name="parameters" element="tns:ValidateForm"/>
      </wsdl:message>
      <wsdl:message name="ImycustomermyprojectService_ValidateForm_OutputMessage">
        <wsdl:part name="parameters" element="tns:ValidateFormResponse"/>
      </wsdl:message>
      <wsdl:portType name="ImycustomermyprojectService">
        <wsdl:operation name="ValidateForm">
          <wsdl:input wsaw:Action="http://www1.myproject.mydomain.com/ImycustomermyprojectService/ValidateForm" message="tns:ImycustomermyprojectService_ValidateForm_InputMessage"/>
          <wsdl:output wsaw:Action="http://www1.myproject.mydomain.com/ImycustomermyprojectService/ValidateFormResponse" message="tns:ImycustomermyprojectService_ValidateForm_OutputMessage"/>
        </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="Basic" type="tns:ImycustomermyprojectService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="ValidateForm">
          <soap:operation soapAction="http://www1.myproject.mydomain.com/ImycustomermyprojectService/ValidateForm" 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="mycustomermyprojectService">
        <wsdl:port name="Basic" binding="tns:Basic">
          <soap:address location="http://www1.myproject.mydomain.com/"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>