Visual Studio 2008不生成Web Service Reference.cs代理类?

时间:2009-04-30 17:14:24

标签: visual-studio-2008 web-services soap wsdl

我刚刚将一个项目从Visual Studio 2005格式移植到Visual Studio 2008.该项目大量使用了消费Web服务。

我们将自己的自定义父类用于Visual Studio生成的生成的代理类(Reference.cs)。

我使用Visual Studio 2008添加了一个新的Web引用,它没有生成代理类,只是一个reference.map文件。似乎它可能会在飞行中构建它们。这不适合我的需要,因为我需要修改代码以适应我们的框架。

注意,这是Web引用,而不是服务引用。

有谁知道让VS2k8像2k5一样工作的方法吗?

2 个答案:

答案 0 :(得分:1)

也许您应该使用svcutil.exewsdl.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工作:)