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