svcutil генерирует код клиента только для одного из нескольких сервисных контрактов - PullRequest
0 голосов
/ 13 июля 2011

У меня есть служба с несколькими контрактами на обслуживание, когда я запускаю svcutil.exe, она генерирует клиентский код только для одного или другого контракта (кажется, он переключается при каждом запуске). Еще немного информации: обслуживание:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class BackendService : IBackendService, IFitContract
{
     //implementation
}

Мой web.config выглядит так:

<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <wsDualHttpBinding/>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<protocolMapping>
  <add scheme="http" binding="wsDualHttpBinding"/>
</protocolMapping>
</system.serviceModel>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

svcutil call:

svcutil.exe /config:App.config /out:BackendService.cs /n:*,BackendServer /r:bin/Debug/CSCommon.dll http://localhost:56725/BackendService.svc?wsdl

есть мысли, почему это происходит?

1 Ответ

2 голосов
/ 13 июля 2011

Поскольку вы не объявляете конечные точки для службы в web.config, WCF добавит одну конечную точку по умолчанию. Поскольку у вас есть два варианта для этой конечной точки, WCF просто выберет 1 (я не знаю, что он делает, чтобы выбрать его). Поэтому в этом случае вам необходимо явно объявить конечные точки, как показано ниже.

<system.serviceModel>
  <services>
    <service name="BackendServiceNamespace.BackendService">
      <endpoint address="ibs"
                contract="BackendServiceNamespace.IBackendService"
                binding="wsDualHttpBinding" />
      <endpoint address="ifc"
                contract="BackendServiceNamespace.IFitContract"
                binding="wsDualHttpBinding" />
    </service>
  </services>
</system.serviceModel>
...