svcutil сгенерированный код недостающие части - PullRequest
0 голосов
/ 14 января 2012

У меня есть это:

"%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, и все методы ServiceAWsClient () отсутствуют в ServiceProxy.cs.

ОБНОВЛЕНИЕ: Я удалил параметр / 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;
}

ть!

1 Ответ

1 голос
/ 15 января 2012

Генерация не удалась.svcutil не поддерживает многоцелевой таргетинг.

Infact ClientBase (прокси, сгенерированный базовый класс) может получить доступ только к одной конечной точке.

К сожалению, вам нужно сгенерировать 3 разных прокси.Фактически, эти прокси-серверы инкапсулируют фактический канал (сокет), который связывается со службой.Таким образом, кажется, что один прокси может обрабатывать только одну конечную точку

...