Создание веб-службы с WCF для использования существующим клиентом Java с использованием WSDL

У меня есть существующий клиент Java, для которого мне нужно создать веб-сервис в.NET 4.0. Интерфейс уже определен с файлом WSDL, поэтому я создал библиотеку классов и сгенерировал заглушку на стороне сервера с помощью WSCF.blue (я также попытался svcutil безуспешно). WSCF.blue заботится о ссылках и добавлении файлов (отличный инструмент:-)), поэтому я заменил сгенерированное исключение System.NotImplementedException некоторым кодом. Затем я разместил результат на сервере разработки ASP.NET.

Я предполагаю, что мне нужен какой-то дополнительный шаг, так как я получаю известное "Имя контракта" WsdlWebService.IHello "не может быть найдено в списке контрактов, реализованных сервисом" Hello "". при поиске службы в браузере (см. Не найдено имя контракта WCF 'IMyService'?). Но здесь есть атрибут ServiceContractAttribute, который, я ожидаю, выполняет свою работу.

Буду признателен, если кто-то может указать на то, что мне не хватает...

Это сгенерированный интерфейс и реализация:



    namespace WsdlWebService
    {
        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
        [System.ServiceModel.ServiceContractAttribute(Namespace="http://webservice.com", ConfigurationName="IHello")]
        public interface IHello
        {
            [System.ServiceModel.OperationContractAttribute(Action="http://webservice.com/IHello/helloName", ReplyAction="http://webservice.com/IHello/helloNameResponse")]
            [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
            [return: System.ServiceModel.MessageParameterAttribute(Name="helloNameReturn")]
            string helloName(string name);
        }

        [System.ServiceModel.ServiceBehaviorAttribute(InstanceContextMode=System.ServiceModel.InstanceContextMode.PerCall, ConcurrencyMode=System.ServiceModel.ConcurrencyMode.Single)]
        public class Hello : IHello
        {
            public virtual string helloName(string name)
            {
                return "Hello world from (via wsdl extraced server) " + name + "!";
            }
        }
    } 

Это web.config:



    <?xml version="1.0"?>
    <configuration>
      <system.web>
        <compilation debug="false" targetFramework="4.0" />
      </system.web>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceTypeBehaviors">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="WsdlWebService.Hello"
                 behaviorConfiguration="MyServiceTypeBehaviors">
            <endpoint address="" binding="basicHttpBinding"
                 contract="WsdlWebService.IHello"/>
            <endpoint contract="IMetadataExchange"
               binding="mexHttpBinding" address="mex"/>
          </service>
        </services>
      </system.serviceModel>
    </configuration>

1 ответ

Решение

Я просто догадываюсь, так как у меня не было этой ошибки, но я заметил, что вы установили ConfigurationName = "IHello" в контракте на обслуживание, но в конфигурации вы называете его "WsdlWebService.IHello". Я бы по крайней мере проверил, является ли имя конфигурации атомарным или все еще только частью пространства имен.

Другие вопросы по тегам