我刚刚将一个项目从Visual Studio 2005格式移植到Visual Studio 2008.该项目大量使用了消费Web服务。
我们将自己的自定义父类用于Visual Studio生成的生成的代理类(Reference.cs)。
我使用Visual Studio 2008添加了一个新的Web引用,它没有生成代理类,只是一个reference.map文件。似乎它可能会在飞行中构建它们。这不适合我的需要,因为我需要修改代码以适应我们的框架。
注意,这是Web引用,而不是服务引用。
有谁知道让VS2k8像2k5一样工作的方法吗?
答案 0 :(得分:1)
也许您应该使用svcutil.exe或wsdl.exe来生成代理类文件。
答案 1 :(得分:1)
经过一段时间的讨论之后,我在互联网上发现了这个post。
事实证明,提供的WSDL有一个代码片段:
<wsdl:message name="someMessageRequest">
<wsdl:part name="parameters" element="ns0:someMessageRequest"/>
</wsdl:message>
<wsdl:message name="someMessageResponse">
<wsdl:part name="parameters" element="ns0:someMessageResponse"/>
</wsdl:message>
... SNIP ...
<soap:operation style="document" soapAction="someMessage"/>
<wsdl:input>
<soap:body use="literal" parts="parameters"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" parts="parameters"/>
</wsdl:output>
因为它对请求和响应参数使用相同的名称,所以wsdl.exe无法解析它并死掉。
我的修复:
<wsdl:message name="someMessageRequest">
<wsdl:part name="parametersRequest" element="ns0:someMessageRequest"/>
</wsdl:message>
<wsdl:message name="someMessageResponse">
<wsdl:part name="parametersResponse" element="ns0:someMessageResponse"/>
</wsdl:message>
... SNIP ...
<soap:operation style="document" soapAction="someMessage"/>
<wsdl:input>
<soap:body use="literal" parts="parametersRequest"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" parts="parametersResponse"/>
</wsdl:output>
现在生成代理。
SoA的部分乐趣在于,您永远不会相信您提供的WSDL工作:)