【问题标题】:svcutil generated code missing partssvcutil 生成的代码缺少部分
【发布时间】:2012-01-14 12:30:20
【问题描述】:

我有这个:

"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\bin\svcutil.exe" ^
/noLogo  /t:code  /l:cs /mc /tcv:Version35 /ct:System.Collections.Generic.List`1 /n:*,MYNS ^
/config:MyServiceProxy.config  ^
/out:ServiceProxy.cs  ^
https://remote-service/ServiceA?wsdl 

它按照我的预期生成类、类型和端点配置。 当我添加多个端点时:

"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\bin\svcutil.exe" ^
/noLogo  /t:code  /l:cs /mc /tcv:Version35 /ct:System.Collections.Generic.List`1 /n:*,MYNS ^
/config:MyServiceProxy.config  ^
/out:ServiceProxy.cs  ^
https://remote-service/ServiceA?wsdl https://remote-service/ServiceB?wsdl https://remote-service/ServiceC?wsdl 

MyServiceProxy.config 中没有端点,ServiceProxy.cs 中缺少所有 ServiceAWsClient() 方法。

更新:我删除了 /i 选项,因为它使类成为内部的。

更新:我现在可以生成两个 .cs 文件,如果我使用 /serializer:DataContractSerializer 选项,我得到了 ServiceAWsClient() 类,没有它我得到了共享类型。 有没有办法同时获得两者?

更新: 包含 ServiceAWsClient() 类的文件仍然不好。方法缺少参数。为什么? WSDL 包含:

<xs:element name="service" type="tns:service"/>
<xs:element name="serviceResponse" type="tns:serviceResponse"/>
<xs:complexType name="service">
    <xs:sequence>
    <xs:element name="context" type="ns1:GenericContext" minOccurs="0"/>
    <xs:element name="userData" type="ns2:UserData" minOccurs="0"/>
</xs:sequence>
</xs:complexType> 
<xs:complexType name="serviceResponse">
    <xs:sequence>
        <xs:element name="resultContext" type="ns1:GenericResponseContext" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

svcutil 生成:

public void service()
{
    base.Channel.service();
}

什么时候应该:

public MYNS.GenericResultContext service(MYNS.GenericContext context, MYNS.ServiceA userData)
{
    MYNS.service inValue = new MYNS.service();
    inValue.context = context;
    inValue.userData = userData;
    MYNS.serviceResponse retVal = ((MYNS.ServiceA)(this)).service(inValue);
    return retVal.resultContext;
}

ty!

【问题讨论】:

    标签: wcf svcutil.exe


    【解决方案1】:

    生成失败。 svcutil 不支持多目标。

    事实上ClientBase(生成基类的代理)只能访问一个端点。

    不幸的是,您必须生成 3 个不同的代理。实际上,这些代理正在封装与服务通信的实际通道(套接字)。所以看起来一个代理只能处理一个端点

    【讨论】:

    • 使用 svcutil 的全部意义在于获得一个代理。我确定问题出在选项上,我只是想不通。也尝试使用 /serializer:DataContractSerializer,效果有所不同,但仍然不好。
    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 2011-08-23
    • 2011-02-15
    • 2011-01-10
    • 2020-09-22
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多